C# WinForm用关联数据库表填充TreeView时编译报错求助
C# WinForm TreeView填充报错解决办法
两个报错都是因为误用了ASP.NET WebForm的TreeView相关API,WinForm和WebForm的控件成员定义完全不同,修改方案如下:
错误1:TreeNode构造函数参数转换失败
WinForm的TreeNode没有接收两个字符串(文本、键)的构造重载,你需要构造节点后单独给Name属性赋值(对应你要存的编码值)。
修改示例:
// 原错误写法 // macroNode = new TreeNode(macroName, macroCode); // superNode = new TreeNode(superName, superCode); // objektNode = new TreeNode(objektName, objekCode); // 修正后WinForm写法 macroNode = new TreeNode(macroName) { Name = macroCode }; superNode = new TreeNode(superName) { Name = superCode }; objektNode = new TreeNode(objektName) { Name = objekCode };
错误2:TreeNode找不到ChildNodes属性
WinForm的TreeNode子节点集合属性名为Nodes,而非WebForm的ChildNodes,全局替换所有ChildNodes为Nodes即可。
修改示例:
// 原错误写法 // macroNode.ChildNodes.Add(superNode); // superNode.ChildNodes.Add(objektNode); // 修正后写法 macroNode.Nodes.Add(superNode); superNode.Nodes.Add(objektNode);
额外代码问题修正
你的代码里还有三处会导致运行报错的问题,建议同步修改:
- 事件名错误:
Page_Load是WebForm的页面加载事件,WinForm窗体加载事件默认是Form_Load,你需要把Page_Load方法关联到Form2的Load事件,否则初始化逻辑不会执行。 - SqlCommand参数错误:第一个查询的SqlCommand构造错把连接字符串当SQL语句传入,修改为:
// 原错误写法 // cmd = new SqlCommand(Form1.MyConnectionString, con); // 修正后 cmd = new SqlCommand(CmdString, con);
- 资源泄漏问题:代码里重复创建SqlConnection,建议把数据库操作都放到
using块中,自动释放连接资源。
内容的提问来源于stack exchange,提问作者Олег Литвинов
相关产品推荐
相关产品推荐

