【问题标题】:Asp.net Treeview with check boxes带有复选框的 Asp.net Treeview
【发布时间】:2013-06-25 05:44:12
【问题描述】:

下面是我在aspx页面中的treeview控件

 <asp:TreeView ID="TvCategories" runat="server" ShowCheckBoxes="All"    OnSelectedNodeChanged="TvCategories_SelectedNodeChanged">
</asp:TreeView>

我如下动态绑定它:

    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    ds = BindCategories();
    dt = ds.Tables[0];

   for (int i = 0; i < dt.Rows.Count; i++)
   {
      TreeNode firstchild = new TreeNode();
      firstchild.Text = " Shoes";
      firstchild.SelectAction = TreeNodeSelectAction.Select;
      TvCategories.Nodes.Add(firstchild);
      DataSet ds1 = new DataSet();
      ds1 = BindSubCategories(dt.Rows[i]["InventoryType"].ToString());
      DataTable dt1 = ds1.Tables[0];

      for (int j = 0; j < dt1.Rows.Count; j++)
      {
           TreeNode childnode = new TreeNode();
           childnode.SelectAction = TreeNodeSelectAction.Select;

           if (j == 0)
              childnode.Text = "Nike";
           if (j == 1)
              childnode.Text = "Rebok";
           if (j == 2)
              childnode.Text = "Addidas";
              firstchild.ChildNodes.Add(childnode);

       }
  } 

下面是我在浏览器中运行 Web 应用程序时的树形视图:

我想做什么?

通过选择根节点也会选择所有子节点,反之亦然
当我选择任何孩子或任何根时,将触发一个回发事件,并且基于选择我想绑定 gridview。

【问题讨论】:

  • 你的问题是?
  • 你想根据你所做的选择来绑定你的网格吗?
  • 是的,我想根据我所做的选择绑定您的网格。
  • 我的问题是:通过选择根节点,它如何同时选择所有子节点,反之亦然?当我选择任何孩子或任何根时,回发事件将如何触发?
  • 我更新了答案。它导致PostBack CheckChanged

标签: c# asp.net checkbox treeview


【解决方案1】:

我建议您将子节点值与父节点值一起附加,这样当您要根据用户选择绑定 gridview 时,这对您来说很容易。

查看下面显示如何检查父子节点的链接:

http://nilthakkar.blogspot.in/2009/04/check-uncheck-treeview-checkboxes-with_13.html

您可以使用树视图的Checkednodes 属性对树视图的选中节点进行赋值。

查看以下链接,了解如何操作。

http://nilthakkar.blogspot.in/2009/05/retrieve-selected-treenode-value-at.html

【讨论】:

  • thanx Nileshsir,此链接 (nilthakkar.blogspot.in/2009/04/…) 对我很有帮助。在我的情况下不会使用第二个链接。实际上我想根据复选框选择绑定网格。所以我想根据选择来回发页面,而不是通过点击按钮来回发。
【解决方案2】:

使用此代码回发支票更改:

<script language="javascript" type="text/javascript">
   e = e || window.event;
   var o = e.srcElement || e.target;
</script> 
    <asp:TreeView ID="TvCategories" runat="server" ShowCheckBoxes="All onclick="postBackByObject(this);" >
    </asp:TreeView>
<script language="javascript" type="text/javascript">
    document.getElementById('<%=TvCategories.ClientID %>').addEventListener('click', postBackByObject);

</script> 

来自here的部分内容

【讨论】:

  • 静止页面没有回发。这是下面的事件是正确的吗? protected void TvCategories_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { }
  • @CodeGuru 我的代码会导致 Opera 和 IE 中的 post pack 但不是 FF,所以如果我有时间会修复它,那么不需要额外的操作,您可以更改对 PostBack 的检查 Page_Load
  • @mahidgeek microsoft 说 treeview 没有自动回发属性。 msdn.microsoft.com/en-us/library/ms178259%28v=vs.80%29.aspx
  • @CodeGuru 是的,但是使用此代码,您可以手动生成 PostBack
  • @mahidgeek 是我使用的代码,但它也不起作用..我认为这不是完美的解决方案。对吗??
猜你喜欢
  • 2019-02-22
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多