[Winform入门教程]DataGridview控件使用学习笔记

1.DataGridView控件及元素初始化

//DataGridView控件初始化
public System.Windows.Forms.DataGridView dataGridView1;
this.dataGridView1 = new System.Windows.Forms.DataGridView();

//DataGridView列初始化
public System.Windows.Forms.DataGridViewCheckBoxColumn Column1;
public System.Windows.Forms.DataGridViewTextBoxColumn Column2;
public System.Windows.Forms.DataGridViewTextBoxColumn Column3;
public System.Windows.Forms.DataGridViewTextBoxColumn Column4;
public System.Windows.Forms.DataGridViewTextBoxColumn Column5;

this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn();

//右键菜单初始化
public System.Windows.Forms.ContextMenuStrip contextMenuStrip1;

2.DataGridView控件参数设置

this.dataGridView1.AllowUserToResizeRows = false;//设置用户是否可以调整行的大小。
this.dataGridView1.BackgroundColor = System.Drawing.Color.White;//设置DataGridView控件背景色
this.dataGridView1.ContextMenuStrip = this.contextMenuStrip1;//设置右键菜单
this.dataGridView1.RowHeadersVisible = false;//取消带*的第一列
this.dataGridView1.GridColor = System.Drawing.SystemColors.Control;
this.dataGridView1.MultiSelect = false;//不允许多行选择
this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;//设置垂直滚动条
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;//设置选择模式为整行选择

3.DataGridViewColumn参数初始化

this.Column1.HeaderText = "选择";
this.Column1.Name = "Column1";
this.Column1.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.Column1.Width = 40;

this.Column2.HeaderText = "名称";
this.Column2.Name = "Column2";
this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.Column2.Width = 280;

this.Column3.HeaderText = "学科";
this.Column3.Name = "Column3";
this.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.Column3.Width = 240;

this.Column4.HeaderText = "级别";
this.Column4.Name = "Column4";
this.Column4.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.Column4.Width = 60;

this.Column5.HeaderText = "编码";
this.Column5.Name = "Column5";
this.Column5.Resizable = System.Windows.Forms.DataGridViewTriState.False;

4.添加DataGridViewColumn至DataGridView

this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[{
this.Column1,
this.Column2,
this.Column3,
this.Column4,
this.Column5});

5.清空DataGridView控件中的所有数据

this.DataGridView1.Rows.Clear();

 6.DataGridView控件中最后一行添加数据

this.dataGridView1.Rows.Add("a", "b", "c", "d");

 7.使DataGridView控件中某行被选中,取消之前第一行选中状态

this.dataGridView1.Rows[this.CurrentRowIndex].Selected = true;
this.dataGridView1.Rows[0].Selected = false;

 8.根据DataGridView内容自动调整列宽

this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

 9.在 C# 中跨线程访问 DataGridView 需要使用 Invoke 的完整解决方案

// 获取单元格值的通用方法
public object SafeGetCellValue(int rowIndex, int colIndex)
{
    if (dataGridView1.InvokeRequired)
    {
        return dataGridView1.Invoke(new Func<int, int, object>((r, c) => 
        {
            return dataGridView1.Rows[r].Cells[c].Value;
        }), rowIndex, colIndex);
    }
    else
    {
        return dataGridView1.Rows[rowIndex].Cells[colIndex].Value;
    }
}

// 使用示例
var value = SafeGetCellValue(0, 0);
// 设置单元格值的通用方法
public void SafeSetCellValue(int rowIndex, int colIndex, object value)
{
    if (dataGridView1.InvokeRequired)
    {
        dataGridView1.BeginInvoke(new Action<int, int, object>((r, c, v) => 
        {
            dataGridView1.Rows[r].Cells[c].Value = v;
        }), rowIndex, colIndex, value);
    }
    else
    {
        dataGridView1.Rows[rowIndex].Cells[colIndex].Value = value;
    }
}

// 使用示例
SafeSetCellValue(0, 0, "新值");

 方法2:

private delegate void UpdateDataGridViewCellValue(DataGridView dgv, int rowIndex, int colIndex, string value);

private UpdateDataGridViewCellValue updateDataGridViewCellValue;

updateDataGridViewCellValue = new UpdateDataGridViewCellValue(SafeUpdateCellValue);

private void SafeUpdateCellValue(DataGridView dgv, int rowIndex, int colIndex, string value)
{
    if(dgv.InvokeRequired)
    {
        dgv.Invoke(new UpdateDataGridViewCellValue(SafeUpdateCellValue), new object[] { dgv, rowIndex, colIndex, value });
    }
    else
    {
        dgv.Rows[rowIndex].Cells[colIndex].Value = value;
    }
}

 10.禁用DataGridView选中某个单元格时该列所在header高亮为蓝色效果

System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle();

dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Control;//原来为SystemColors.Highlight

this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10;

 

posted @ 2020-01-29 01:43  修道者~  阅读(109)  评论(0)    收藏  举报