以编程方式添加DataGridView列

| 我有一个充满产品信息的DataGridView。 datagridview总共有50列,但是用户并不总是需要所有列,我想帮助他们选择要显示的列和不显示的列。 我要编程的一种解决方案是,当用户右键单击列时,他们可以从弹出的列表中进行选择,选择要显示的列和不应该填充的列。就像下面的图片一样。 我怎样才能做到这一点。我真的很感谢您的帮助。     
已邀请:
        您可以使用WinForms ContextMenuStrip和DataGridView列的Visible属性来实现此目的。 这是一些您想要的示例代码:
namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            BindingList<User> users = new BindingList<User>{
                  new User{Name = \"John\", Address=\"Home Street\", Title=\"Mr.\"},
                  new User{Name = \"Sally\", Address=\"Home Street\", Title=\"Mrs.\"}
            };

            contextMenuStrip1.AutoClose = true;       
            contextMenuStrip1.Closing += new ToolStripDropDownClosingEventHandler(contextMenuStrip1_Closing);

            dataGridView1.DataSource = users;

            dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);
        }

        void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {

            foreach (DataGridViewColumn gridViewColumn in this.dataGridView1.Columns)
            {
                ToolStripMenuItem item = new ToolStripMenuItem();
                item.Name = gridViewColumn.Name;
                item.Text = gridViewColumn.Name;
                item.Checked = true;
                item.CheckOnClick = true;
                item.CheckedChanged += new EventHandler(item_CheckedChanged);
                contextMenuStrip1.Items.Add(item);
            }

            foreach (DataGridViewColumn gridViewColumn in this.dataGridView1.Columns)
            {
                gridViewColumn.HeaderCell.ContextMenuStrip = contextMenuStrip1;
            }

        }

        void item_CheckedChanged(object sender, EventArgs e)
        {
            ToolStripMenuItem item = sender as ToolStripMenuItem;

            if (item != null)
            {
                dataGridView1.Columns[item.Name].Visible = item.Checked;
            }
        }

        void contextMenuStrip1_Closing(object sender, ToolStripDropDownClosingEventArgs e)
        {
            if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)
            {
                e.Cancel = true;
            }
        }
    }

    public class User
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public string Title { get; set; }
    }

}
那里的User类就是这样,示例可以进行编译,并提供了一些绑定我的DataGridView的东西。 我还添加了一些代码,该代码允许用户一次单击多个列(通过检查关闭和取消的关闭原因是否为选中项)。在我看来,从标准UI行为的转向来看,这实际上是一个小界限-通常更好的做法是坚持标准行为,但我将其包括在内,因为(在我看来)在这种情况下很有用。 同样,通常将这种自定义设置放到从DataGridView继承的新控件中,这样比较整齐。     

要回复问题请先登录注册