我想从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等,
我想得到那个值
有什么想法吗?提前致谢
答案 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();
}
}