如何从c#中的Treeview获取复选框选中的值?

时间:2013-09-02 07:18:06

标签: c# asp.net oracle treeview

我想从Treeview获取复选框选中的值。

我在Treeview上绑定来自oracle数据库的数据。

代码:

   protected void Page_Load(object sender, EventArgs e)
    {

        fill_Tree2();
    }

    void fill_Tree2()
    {

        DataSet PrSet = PDataset("Select * from Activity_Parent");

        TreeView1.Nodes.Clear();

        foreach (DataRow dr in PrSet.Tables[0].Rows)
        {

            TreeNode tnParent = new TreeNode();

            tnParent.CollapseAll();

            tnParent.Text = dr[1].ToString();

            tnParent.Value = dr[0].ToString();

            tnParent.ToolTip = "Click to get Child";

            TreeView1.Nodes.Add(tnParent);

            FillChild(tnParent, tnParent.Value);

        }
    }

    public void FillChild(TreeNode parent, string ParentId)
    {

        DataSet ds = PDataset("Select * from Activity_child where Activity_ID =" + ParentId);

        parent.ChildNodes.Clear();

        foreach (DataRow dr in ds.Tables[0].Rows)
        {

            TreeNode child = new TreeNode();

            child.Text = dr["ActivityName"].ToString().Trim();

            child.Value = dr["ActivityChild_ID"].ToString().Trim();

            parent.ChildNodes.Add(child);
        }

    }

    protected DataSet PDataset(string Select_Statement)
    {

        OleDbConnection DbConnection = new OleDbConnection("Provider=MSDAORA.SNIDB;Data Source=SNIDB;User ID=AZRAAR;Password=AZRAAR");

        OleDbDataAdapter ad = new OleDbDataAdapter(Select_Statement, DbConnection);

        DataSet ds = new DataSet();

        ad.Fill(ds);

        ViewState["ds"] = ds;

        return ds;

    }

在下面的按钮点击事件中,我尝试了但它无法正常工作

    protected void btnGet_Click(object sender, EventArgs e)
    {
        DataSet ds1= (DataSet)ViewState["ds"];
        foreach (DataRow dr in ds1.Tables[0].Rows)
        { 
          TreeNode tn = new TreeNode();
          if (tn.Checked == true)
          {
              Response.Write(tn.Text);

          }
          tn.Text = dr["ActivityName"].ToString(); 
          TreeView1.Nodes.Add(tn); 
        } 
     }
}

在下图中,如果我选择Checkbox HR Activity1,Developer Activity3等,

我想得到那个值

Treeview

有什么想法吗?提前致谢

2 个答案:

答案 0 :(得分:0)

获取所有选定TreeNode集合的简单方法是:

private List<TreeNode> AllCheckedNodes = new List<TreeNode>();

private void GetAllCheckedNodes()
{
    for (int i = 0; i < TreeView1.CheckedNodes.Count; i++)
    {
        AllCheckedNodes.Add(TreeView1.CheckedNodes[i]);
    }
}

答案 1 :(得分:0)

您的btnGet_Click方法不正确 - 您在该方法中创建新的TreeView对象,而不是页面上存在的对象。

您需要做的是为SelectedNodeChanged事件创建事件处理程序。

以下是您应该添加到fill_Tree2()方法的一行

private void FillTree()
{
    Treeview1.SelectedNodeChanged += Treeview1_SelectedNodeChanged;

}

protected void Treeview1_SelectedNodeChanged(object sender, EventArgs e)
{
   string value = Treeview1.SelectedNode.Value;
}

另一个错误是使用这样写的Page_Load方法。这将在每次重新加载页面时加载您的treview(即使在回发后)。你想要的是这样的东西

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
       fill_Tree2();
    }
}