DataGridView控件的数据列显示与隐藏控制 - (第二十三讲)
视频讲解如下:
CSDN源码下载
https://download.csdn.net/download/gs1069405343/19880054
网盘下载,提取码:gnzo
https://pan.baidu.com/s/1frqIWKHC6NX3DCtUSUXtnQ
这里给大家讲解一下DataGridView控件的数据列显示与隐藏控制
演示效果如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp
{
public partial class Form1 : Form
{
/// <summary>
/// 列控制
/// </summary>
private ContextMenuStrip MenuStrip_Tab { get; set; }
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
List<string> TabText = new List<string>() { "数据1", "数据2", "数据3", "数据4", "数据5", "数据6", "数据7", "数据8" };
List<int> TabWidth = new List<int>() { 60, 60, 60, 60, 60, 60, 60, 60 };
GridViewTable_table(dataGridView1, TabText, TabWidth);
dataGridView1.CellMouseDown += DataGridView1_CellMouseDown;
List<string> TabList = new List<string>() { "(全部列显示)", "" };
TabList.AddRange(TabText);
MenuStrip_Tab = ContextMenuStrip_TableRow(TabList);
// 弹窗不自动关闭
MenuStrip_Tab.Closing += MenuStrip_Tab_Closing;
for (int i = 0; i < MenuStrip_Tab.Items.Count; i++) { if (i != 1) MenuStrip_Tab.Items[i].Click += new EventHandler(EventHandler); }
}
private void MenuStrip_Tab_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)
{ e.Cancel = true; }
}
// dataGridView1的按键检测事件,可以检测左键、右键、滚轮等按键
private void DataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
// 鼠标左键检测
if (e.Button == MouseButtons.Left && e.RowIndex == -1 && e.ColumnIndex == 0)
{
DataGridView dataGridView = dataGridView1;
Point dPoint = dataGridView.PointToScreen(new Point(0, dataGridView.ColumnHeadersHeight));
MenuStrip_Tab.Show(dPoint.X, dPoint.Y);
}
}
#region 报表和弹窗的数据添加
/// <summary>
/// 添加报表列
/// </summary>
/// <param name="data"></param>
/// <param name="text"></param>
/// <param name="Width"></param>
public void GridViewTable_table(DataGridView data, List<string> text, List<int> Width)
{
// 设置单元格文本太长,可以换行显示
data.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
// 添加数据列
for (int id = 0; id < text.Count; id++)
{
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = text[id];
col.ToolTipText = text[id];
col.Width = Width[id];
if (Width[id] == 0) col.Visible = false;
col.ReadOnly = true;
col.SortMode = DataGridViewColumnSortMode.Automatic;
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;
DataGridViewContentAlignment dva = DataGridViewContentAlignment.MiddleCenter;
col.DefaultCellStyle = new DataGridViewCellStyle { BackColor = Color.White, Alignment = dva };
data.Columns.Add(col);
}
}
/// <summary>
/// 给弹窗添加数据
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public ContextMenuStrip ContextMenuStrip_TableRow(List<string> text)
{
ContextMenuStrip oStrip = new ContextMenuStrip();
oStrip.BackColor = Color.FromArgb(217, 243, 255);
for (int id = 0; id < text.Count; id++)
{
if (text[id] == "")
{
oStrip.Items.Add(new ToolStripSeparator());
continue;
}
ToolStripMenuItem row = new ToolStripMenuItem();
row.Checked = (id == 0) ? false : true;
row.CheckState = (id == 0) ? CheckState.Unchecked : CheckState.Checked;
row.CheckOnClick = true;
row.Text = text[id];
oStrip.Items.Add(row);
}
return oStrip;
}
#endregion
private void EventHandler(object sender, EventArgs e)
{
string KeyName = (sender as ToolStripMenuItem).AccessibilityObject.Name;
if (KeyName.Contains("全部"))
{
ToolStripMenuItem h = MenuStrip_Tab.Items[0] as ToolStripMenuItem;
for (int i = 2; i < MenuStrip_Tab.Items.Count; i++)
((ToolStripMenuItem)MenuStrip_Tab.Items[i]).Checked = h.Checked;
}
string value = "";
for (int i = 2; i < MenuStrip_Tab.Items.Count; i++)
{
value += (((ToolStripMenuItem)MenuStrip_Tab.Items[i]).Checked ? "1" : "0");
}
// 这里添加代码,将value值保存起来,等软件启动时再读取出来,可以实现记忆功能
/* ... */
TableLine(value);
}
private void TableLine(string iValue = null)
{
// 软件启动时,可以调用再调用一次XsddTableLine,来读取上一次的配置
// string value = iValue == null ? 【这里添加读取配置的代码】: iValue;
string value = iValue;
for (int i = 2; value == null && i < MenuStrip_Tab.Items.Count; i++)
{
((ToolStripMenuItem)MenuStrip_Tab.Items[i]).Checked = true;
}
for (int i = 0; value != null && i < value.Length && i < MenuStrip_Tab.Items.Count - 2; i++)
{
if (this.dataGridView1.Columns.Count > (i + 1))
{
this.dataGridView1.Columns[i + 1].Visible = value[i] == '1';
}
if (iValue == null) // 启动时,恢复设置弹窗
{
((ToolStripMenuItem)MenuStrip_Tab.Items[i + 2]).Checked = value[i] == '1';
}
}
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Columns.Count; i++)
Console.WriteLine(this.dataGridView1.Columns[i].Width);
}
}
}