我想将DataTable绑定到TreeView.I已编写以下Code.Its目前工作,意味着它显示DataTable但没有根节点的所有数据。
List<DocumentData> lstData = GetSPDocuments();
gvDocuments.DataSource = lstData;
gvDocuments.DataBind();
DataTable dt = ConvertToDataTable(lstData);
TreeNode node1 = new TreeNode("Root");
foreach (DataRow r in dt.Rows)
{
int nodeLvl = int.Parse(r["ID"].ToString());
string nodeParent = "Folders";
string nodeName = r["Title"].ToString();
TreeNode tNode = new TreeNode(nodeName);
ht.Add(nodeLvl.ToString() + nodeName, tNode);
if (tvDocs.Nodes.Count == 0)
tvDocs.Nodes.Add(tNode);
else
{
nodeLvl--;
tvDocs.Nodes.Add(tNode);
}
}
如何在这里添加静态根节点???请帮助!
答案 0 :(得分:4)
试试这可能对你有帮助。
protected void Page_Load(object sender, EventArgs e)
{
conStr = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
conn = new OleDbConnection(conStr);
BindTreeViewControl();
}
private void BindTreeViewControl()
{
try
{
DataSet ds = GetDataSet("Select ProductId,ProductName,ParentId from ProductTable");
DataRow[] Rows = ds.Tables[0].Select("ParentId = 0");
for (int i = 0; i < Rows.Length; i++)
{
TreeNode root = new TreeNode(Rows[i]["ProductName"].ToString(), Rows[i]["ProductId"].ToString());
root.SelectAction = TreeNodeSelectAction.Expand;
CreateNode(root, ds.Tables[0]);
treeviwExample.Nodes.Add(root);
}
}
catch (Exception Ex) { throw Ex; }
}
public void CreateNode(TreeNode node, DataTable Dt)
{
DataRow[] Rows = Dt.Select("ParentId =" + node.Value);
if (Rows.Length == 0) { return; }
for (int i = 0; i < Rows.Length; i++)
{
TreeNode Childnode = new TreeNode(Rows[i]["ProductName"].ToString(), Rows[i]["ProductId"].ToString());
Childnode.SelectAction = TreeNodeSelectAction.Expand;
node.ChildNodes.Add(Childnode);
CreateNode(Childnode, Dt);
}
}
private DataSet GetDataSet(string Query)
{
DataSet Ds = new DataSet();
try
{
OleDbDataAdapter da = new OleDbDataAdapter(Query, conn);
da.Fill(Ds);
}
catch (Exception dex) { }
return Ds;
}
和数据库结构是
答案 1 :(得分:0)
// Suppress repainting the TreeView until all the objects have been created.
treeView1.BeginUpdate();
// Clear the TreeView each time the method is called.
treeView1.Nodes.Clear();
// create root node
TreeNode root = new TreeNode("Root");
// loop and add all child nodes to root node
foreach (DataRow r in dt.Rows)
{
// create child node
// add to root node
root.Nodes.Add(child);
}
// add root node to tree view
treeView1.Nodes.Add(root);
// Begin repainting the TreeView.
treeView1.EndUpdate();
答案 2 :(得分:0)
你有没有得到这个答案?你快到了。
TreeView 控件的名称是什么?由于您从未说过,我使用treeView1
,并修改了您的代码以包含以下内容:
private TreeView treeView1;
private void TreeView_DataBind() {
treeView1.Nodes.Clear();
List<DocumentData> lstData = GetSPDocuments();
gvDocuments.DataSource = lstData;
gvDocuments.DataBind();
DataTable dt = ConvertToDataTable(lstData);
TreeNode node1 = new TreeNode("Root");
treeView1.Nodes.Add(node1); // this is the step you missed
foreach (DataRow r in dt.Rows)
{
int nodeLvl = int.Parse(r["ID"].ToString());
string nodeParent = "Folders";
string nodeName = r["Title"].ToString();
TreeNode tNode = new TreeNode(nodeName);
ht.Add(nodeLvl.ToString() + nodeName, tNode);
if (tvDocs.Nodes.Count == 0)
tvDocs.Nodes.Add(tNode);
else
{
nodeLvl--;
tvDocs.Nodes.Add(tNode);
}
}
node1.Expand();
}
轻松自在!