【发布时间】:2015-06-21 07:42:03
【问题描述】:
我有一个datagridview,它从数据库中获取数据,treeview checkBoxes 应该用作过滤器。
我想通过选中/取消选中一个或多个treeview checkedboxes 来过滤datagridview,并应在datagridview 中向我显示所选项目及其相关金额:
我的代码我试图从checkedboxes 转换为treeview checkboxes:
private void treeview1()
{
string rowFilter = string.Empty;
foreach (TreeNode node in treeView1.Nodes)
{
// root nodes to filter on,to check children nodes under each root node
if (node.Text == "AreaCode")
{
// Iterate through the root node's children nodes and build filter based on them being checked or unchecked
foreach (TreeNode childNode in node.Nodes)
{
if (childNode.Checked)
{
if (rowFilter.Length > 0)
{
rowFilter += " OR ";
}
rowFilter += "[AreaCode] = " + childNode.Text;
MessageBox.Show(rowFilter);
}
}
}
}
// Apply rowFilter to DataView.RowFilter
try{
//Check an see what's in the dgv
DataView dv = new DataView(dt);
dv.RowFilter = rowFilter;
datagridview1.DataSource = dv;
}
catch(Exception)
{
MessageBox.Show("IT IS NOT WORKING");
}
}
private void treeview2()
{
string rowFilter = string.Empty;
foreach (TreeNode node in treeView1.Nodes)
{
// In case you add more root nodes to filter on, you'll want to check children nodes under each root node
if (node.Text == "Grant")
{
// Iterate through the root node's children nodes and build your filter based on them being checked or unchecked
foreach (TreeNode childNode in node.Nodes)
{
if (childNode.Checked)
{
if (rowFilter.Length > 0)
{
rowFilter += " OR ";
}
// Outcome is a string NOT WORKING RIGHT
rowFilter += "[Grant] = " + childNode.Text; // gets the selected string but can filter If I put = 'Yes' ist makes it static. I need to make it dynamic
MessageBox.Show(rowFilter);
}
}
}
}
// Apply rowFilter to DataView.RowFilter
try{
//Check an see what's in the dgv
DataView dv = new DataView(dt);
dv.RowFilter = rowFilter;
datagridview1.DataSource = dv;
}
catch(Exception)
{
MessageBox.Show("IT IS NOT WORKING");
}
}
private void treeview3()
{
string rowFilter = string.Empty;
foreach (TreeNode node in treeView1.Nodes)
{
// In case you add more root nodes to filter on, you'll want to check children nodes under each root node
if (node.Text == "Land")
{
// Iterate through the root node's children nodes and build your filter based on them being checked or unchecked
foreach (TreeNode childNode in node.Nodes)
{
if (childNode.Checked)
{
if (rowFilter.Length > 0)
{
rowFilter += " OR ";
}
// Outcome is a string NOT WORKING RIGHT
rowFilter += "[Land] = " + childNode.Text; // gets the selected string but can filter If I put = 'Mitte' ist makes it static. I need to make it dynamic
MessageBox.Show(rowFilter);
}
}
}
}
// Apply rowFilter to DataView.RowFilter
try{
//Check an see what's in the dgv
DataView dv = new DataView(dt);
dv.RowFilter = rowFilter;
datagridview1.DataSource = dv;
}
catch(Exception)
{
MessageBox.Show("IT IS NOT WORKING");
}
}
private void treeViewAfterCheck_AfterCheck(object sender, TreeViewEventArgs e)
{
// Any node that is checked/unchecked will have all of its
// children nodes checked/unchecked
if (e.Node.Nodes.Count > 0)
{
foreach (TreeNode childNode in e.Node.Nodes)
{
childNode.Checked = e.Node.Checked;
}
}
treeview1();
treeview2();
treeview3();
}
【问题讨论】:
标签: c# winforms datagridview treeview