非常规的TreeView数据绑定 本帖最后由 a46567305 于 2010-07-30 10:21:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试试这个,我最近也写了跟你需求类似的TreeView private DataSet ds; public SqlConnection GetSqlConn() { try { string strconn = "Server=(local);Database=SuperMarket;User id=sa;PWD="; SqlConnection conn = new SqlConnection(strconn); conn.Open(); return conn; } catch (Exception ex) { return null; } } public DataSet GetDataSet(string sqlComm, string tableName) { SqlConnection sqlconn = this.GetSqlConn(); SqlDataAdapter sqlda = new SqlDataAdapter(sqlComm, sqlconn); DataSet ds = new DataSet(); sqlda.Fill(ds, tableName); return ds; } private void SubTree(TreeNode parentNode) { TreeNode childNode; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { if (ds.Tables[0].Rows[i][2].ToString() == parentNode.Tag.ToString() && ds.Tables[0].Rows[i][0].ToString() != ds.Tables[0].Rows[i][2].ToString()) { childNode = new TreeNode(ds.Tables[0].Rows[i][1].ToString()); childNode.Tag = ds.Tables[0].Rows[i][0].ToString(); parentNode.Nodes.Add(childNode); } } } private void frmOperation_Load(object sender, EventArgs e) { ds = this.GetDataSet("SELECT id,name,superid FROM SystemRights ORDER BY superid", "SystemRights"); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { if (ds.Tables[0].Rows[i][0].ToString() == ds.Tables[0].Rows[i][2].ToString()) { TreeNode node = new TreeNode(ds.Tables[0].Rows[i][1].ToString()); node.Tag = ds.Tables[0].Rows[i][0].ToString(); tvRights.Nodes.Add(node); SubTree(node); } } } 好的回去再研究下...有个问题ds.Tables[0].Rows[i][2].ToString() == parentNode.Tag.ToString() 左边得到是什么?表的第i行的第2列? 左边得到是superid 判断它的superid 是否和父节点的id一致,一致的话就放到父节点下作为子节点 为了方便的数据绑定我写了两个这样的树给实施人员使用,一个是绑定类似catId1, catIdName1, catId2, catName2, cat*, bid, bname数据源的, 靠各个 catid 成树, 目的是显示 bid/bname----------------另一个是类似id,pid, name的数据源的, 根据 id/pid 成树.先把树表示和成树算法分离出来就好办了.有了树的数据表示, 生成 treenode 就小菜了.自己做吧, 就当你的数据结构和算法的练习. 请问这个控件如何用。 public static class Enumerable 里定义的方法在扩展方法加入后没有了 QueryString是否包含某个Key System.Type 用类文件做为参数传递 C# winform如何绘出一个抛物线的轨迹? 如何获取文件状态? socket接受广播 有些电脑安装自己的WINFORM程序时出现Error1001错误,但是有些电脑能安装上 chart2个Area左右纵坐标对齐问题 求有关程序发布、安装程序制作的文章、例子、教程 Serializable 与 Serializable() 有什么区别? 求教叫一个关于fontDialog的问题
private DataSet ds;
public SqlConnection GetSqlConn()
{
try
{
string strconn = "Server=(local);Database=SuperMarket;User id=sa;PWD=";
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
return conn;
}
catch (Exception ex)
{
return null;
}
} public DataSet GetDataSet(string sqlComm, string tableName)
{
SqlConnection sqlconn = this.GetSqlConn();
SqlDataAdapter sqlda = new SqlDataAdapter(sqlComm, sqlconn);
DataSet ds = new DataSet();
sqlda.Fill(ds, tableName);
return ds;
} private void SubTree(TreeNode parentNode)
{
TreeNode childNode;
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if (ds.Tables[0].Rows[i][2].ToString() == parentNode.Tag.ToString() && ds.Tables[0].Rows[i][0].ToString() != ds.Tables[0].Rows[i][2].ToString())
{
childNode = new TreeNode(ds.Tables[0].Rows[i][1].ToString());
childNode.Tag = ds.Tables[0].Rows[i][0].ToString();
parentNode.Nodes.Add(childNode);
}
}
} private void frmOperation_Load(object sender, EventArgs e)
{
ds = this.GetDataSet("SELECT id,name,superid FROM SystemRights ORDER BY superid", "SystemRights");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if (ds.Tables[0].Rows[i][0].ToString() == ds.Tables[0].Rows[i][2].ToString())
{
TreeNode node = new TreeNode(ds.Tables[0].Rows[i][1].ToString());
node.Tag = ds.Tables[0].Rows[i][0].ToString();
tvRights.Nodes.Add(node);
SubTree(node);
}
}
}
有个问题
ds.Tables[0].Rows[i][2].ToString() == parentNode.Tag.ToString()
左边得到是什么?表的第i行的第2列?
我写了两个这样的树给实施人员使用,一个是绑定类似catId1, catIdName1, catId2, catName2, cat*, bid, bname数据源的, 靠各个 catid 成树, 目的是显示 bid/bname----------------
另一个是类似id,pid, name的数据源的, 根据 id/pid 成树.
先把树表示和成树算法分离出来就好办了.
有了树的数据表示, 生成 treenode 就小菜了.自己做吧, 就当你的数据结构和算法的练习.