Eri*_*ika 5 c# datagridview contextmenu winforms
我有一个填充了产品信息的DataGridView.datagridview共有50列,但用户并不总是需要所有列,我想帮助他们选择要显示的列和不显示的列.
我想编程的一个解决方案是,当用户右键单击列时,他们可以从弹出的列表中选择要显示哪些列以及哪些列不是shos.就像下面的图片一样.

我怎样才能做到这一点.我真的很感激任何帮助.
您可以使用 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; }
}
}
Run Code Online (Sandbox Code Playgroud)
那里的 User 类只是为了编译示例,提供一些东西来绑定我的 DataGridView 。
我还添加了一些代码,允许用户一次单击多个列(通过检查关闭原因并取消,如果它是一个项目选择)。在我看来,这实际上有点偏离标准 UI 行为——坚持标准行为通常更好,但我把它包括在内,因为它(我认为)在这种情况下很有用。
此外,将这种自定义放入继承自 DataGridView 的新控件中通常会更整洁。
| 归档时间: |
|
| 查看次数: |
2388 次 |
| 最近记录: |