我在系统中添加了一个树视图。我可以设法显示树视图的内容。但输出与我的预期不一样。这里我添加了一个输出图像。请看一下。
aspx代码
<asp:TreeView ID="TreeView1" runat="server" ImageSet="XPFileExplorer"
NodeIndent="15">
<HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
<NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"
NodeSpacing="0px" VerticalPadding="10px"></NodeStyle>
<ParentNodeStyle Font-Bold="False" />
<SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"
VerticalPadding="2px" />
</asp:TreeView>
C#代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dt=getDataObj.treeSketch();
PopulateTreeView(dt, 0, null);
}
}
private void PopulateTreeView(DataTable dsParent, int parentId, TreeNode treeNode)
{
foreach (DataRow row in dsParent.Rows)
{
TreeNode child = new TreeNode
{
Text = row["FUNCTION_NAME"].ToString(),
Value = row["FUNCTION_CODE"].ToString()
};
if (parentId == 0)
{
TreeView1.Nodes.Add(child);
dt = getDataObj.loadTree(child);
PopulateTreeView(dt, int.Parse(child.Value), child);
}
else
{
treeNode.ChildNodes.Add(child);
}
}
}
在这里,大写字母中的节点是主节点,而其他节点是子节点。为什么它看起来不像树视图?如何使它工作?
查询
public DataTable loadTree(TreeNode child)
{
string strQuery = @"select FUNCTION_CODE,USER_TYPE from [WEB_FUNCTIONACCESS]
where FUNCTION_CODE = '"+ child +"' ";
return SqlHelper.ExecuteDataset(strConnStringAppeal, CommandType.Text, strQuery).Tables[0];
}
答案 0 :(得分:1)
问题实际上非常明显。
if (parentId == 0)
{
TreeView1.Nodes.Add(child);
dt = getDataObj.loadTree(child);
PopulateTreeView(dt, int.Parse(child.Value), child);
}
else
{
treeNode.ChildNodes.Add(child);
}
所以条件是如果parentId为0则添加根级别节点,否则在子级别添加。
现在,当您调用此方法PopulateTreeView(dt, 0, null)
时,parentId
参数始终为 0 。
更新
在给定子值的情况下,我看到您对方法PopulateTreeView
进行了递归调用。 int.Parse(child.Value)
这总是评估为0?
问题是您使用了child
的引用,它为您提供了TreeNode对象。你真正应该使用的是child.Value
,它为你提供了一个字符串值。然后你可以将它附加到那里的查询字符串。