2010-10-18 85 views
1

我绑定数据集到datagridview,我想给用户删除(可能通过复选框?)列,他不知道看到的可能性。从datagridview动态删除列

所以,一开始他看到5列,他只想看看三个,所以他点击了一些东西,这些列消失了。

你用什么来给用户这个功能?

回答

1

我相信你可以通过设置特定的列可见标志为false来实现这一点。

+0

我知道这个窍门,因为它看起来对用户来说确实很好,所以我想到列标题的复选框(当他点击它时,列会消失),但我不知道它是否是最好的解决方案 – user278618 2010-10-18 20:38:22

+0

你可以添加一个可以显示和隐藏的切换检查菜单项目的菜单,还可以增强菜单项目和上下文菜单。如果您有多个列,我认为表单上的复选框本身会从UI角度看太多。如果你想到Windows任务管理器,显示/隐藏列在菜单中。 – pstrjds 2010-10-18 21:00:55

2

如果你使用一个复选框,你有这样的事情:

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox c = (CheckBox)sender; 
    if (c.Checked) 
     Column1.Visible = true; 
    else 
     Column1.Visible = false; 
} 

你只修改列1名是要显示/隐藏和事件链接到正确的复选框(无论柱ES)。

在表单的构造函数中,我会做类似Checkbox1.checked = true;的操作,所以第一个_CheckChanged会隐藏它,但这取决于您。

+0

这是相当不错的,但每列应该有一个复选框,我不会说这些想法与复选框是最好的 – user278618 2010-10-18 20:48:08

+0

真实的,有不同的方式去做;基本上链接某种类型的事件(onclick,checkchanged,不管)来隐藏列;只是在这里给出一个示例代码 - 没有看到任何实际的代码,我不能真正建议任何更特定于某种需求的东西 – Adam 2010-10-18 20:49:52

1

我建议如下:

创建checkedListBox,并给它添加一个复选框项在网格中的每个列,这是代码:

foreach (DataGridViewColumn column in dataGridView1.Columns) 
     { 
      checkedListBox1.Items.Add(column.HeaderText, column.Visible); 
      checkedListBox1.ItemCheck += (ss, ee) => 
       { 
        if (checkedListBox1.SelectedItem != null) 
        { 
         var selectedItem = checkedListBox1.SelectedItem.ToString(); 
         dataGridView1.Columns[selectedItem].Visible = ee.NewValue == CheckState.Checked; 
        } 
       }; 
     } 

祝你好运!