#c# #asp.net #treeview
#c# #asp.net #просмотр дерева
Вопрос:
Я добавил treeview в свою систему. Я мог бы показать содержимое treeview. Но результат не такой, как я ожидал. Здесь я добавил изображение выходных данных. Пожалуйста, взгляните на это.
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);
}
}
}
Здесь узлы, обозначенные заглавными буквами, являются основным узлом, а другие — дочерними узлами. Почему это не выглядит как treeview? Как заставить это работать?
Запрос
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];
}
Ответ №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
, это то, что дает вам строковое значение. Затем вы можете добавить его к строке запроса там.
Комментарии:
1. На самом деле этот код я нашел в Интернете. Так что даже у меня пока нет правильного представления об этом
2. Можете ли вы отлаживать код локально и переходить по строкам?
3. как вы думаете, что я должен сделать, чтобы это сработало?
4. Конечно, я постараюсь отладить, чтобы дать вам обратную связь. Дайте мне несколько минут
5. Я предлагаю уделять больше внимания источникам данных и посмотреть, действительно ли вы получаете правильные значения для
parentId
параметра