我正在c#asp.net中填充树视图并将数据绑定到它,一切都很好并显示它应该。我现在的问题是,我希望保存对复选框的任何修改,即如果用户点击另一个框并保存,但我检查状态将保持为假。
这是我到目前为止的内容,它迭代了最初加载的内容,而不是已经改变的内容,我尝试了许多变化,但没有设法让它工作 - 任何人的想法?
public void saveCheckedItems()
{
if (treeListItems.CheckedNodes.Count > 0)
{
IList<RadTreeNode> allNodes = treeListItems.GetAllNodes();
for (int i = 0; i < allNodes.Count; i++)
{
RadTreeNode node = (RadTreeNode)allNodes[i];
string fileid = node.Value.ToString();
if (node.Checked == true)
{
if (fileid.Length == 12)
{
saveTreeChanges(Page.Request.QueryString["ID"], fileid,connectionStr);
}
}
}
}
}
编辑 -
按如下方式创建树视图
<telerik:RadTreeView ID="treeListItems" runat="server" CheckBoxes="True" Height="320px"
TriStateCheckBoxes="true" CheckChildNodes="true" Skin="WebBlue" CssClass="table table-bordered" OnNodeDataBound="RadTreeView1_NodeDataBound" >
</telerik:RadTreeView>
像这样绑定数据
public void loadTreeList()
{
DataTable dt = treeMan.getTreeList(connectionStr);
treeListItems.DataTextField = "Description";
treeListItems.DataValueField = "FieldID";
treeListItems.DataFieldID = "FieldID";
treeListItems.DataFieldParentID = "ParentID";
treeListItems.DataSource = dt;
treeListItems.DataBind();
treeListItems.ExpandAllNodes();
}
在示例中我测试了它的3层树,并在第三层检查了一个元素。当我点击更多项目时,只有这个已经检查的项目在列表中可见
答案 0 :(得分:0)
试试这个:
public void saveCheckedItems()
{
IList<RadTreeNode> nodeCollection = treeListItems.CheckedNodes;
foreach (RadTreeNode node in nodeCollection)
{
string fileid = node.Value.ToString();
if (fileid.Length == 12)
{
saveTreeChanges(Page.Request.QueryString["ID"], fileid, connectionStr);
}
}
}
保留已检查节点状态的唯一方法是将它们放入在页面回发之间持续存在的对象中。我建议你使用cookie或ASP.NET Session State。请考虑以下注释中的示例:http://www.telerik.com/community/code-library/aspnet-ajax/treeview/save-the-expanded-state-of-the-treenodes-when-the-treeview-is-being-bound-upon-each-postback.aspx#1603151。