注册:Form加载窗体代码

     /// <summary>
/// 窗体加载Form1
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1(object sender, EventArgs e)
{
//单元格内容点击
this.dataGridView1.CellContentClick += DataGridView1_CellContentClick;
//单元格点击
this.dataGridView1.CellClick += DataGridView1_CellClick; //选中进入编辑状态事件
this.dataGridView1.CellBeginEdit += DataGridView1_CellBeginEdit; //用户是否可以调整所有列的列宽
this.dataGridView1.AllowUserToResizeColumns = false; //用户是否可以调整所有行的行高
this.dataGridView1.AllowUserToResizeRows = false; //禁止指定行或者列的Resize
this.dataGridView1.Columns[].Resizable = DataGridViewTriState.False;
this.dataGridView1.Rows[].Resizable = DataGridViewTriState.False; //开启提示
this.dataGridView1.ShowCellToolTips = true;
dataGridView1[, ].ToolTipText = "测试下面的CellToolTipTextNeeded"; //在需要单元格的工具提示文本时发生。
//this.dataGridView1.CellToolTipTextNeeded += DataGridView1_CellToolTipTextNeeded; //this.contextMenuStrip1自己添加控件绑定即可
dataGridView1.ContextMenuStrip = this.contextMenuStrip1; //ContextMenuStrip设定 CellContextMenuStripNeeded
this.dataGridView1.CellContextMenuStripNeeded += DataGridView1_CellContextMenuStripNeeded; //CellFormatting 事件处理方法
this.dataGridView1.CellFormatting += DataGridView1_CellFormatting; //CellParsing 事件处理方法
this.dataGridView1.CellParsing += DataGridView1_CellParsing;
}

Form加载注册事件

  一、DataGridView 取得或者修改当前单元格的内容:

    核心:DataGridView1.CurrentCell.Value;

    1、当前单元格的Index:

          列:DataGridView1.CurrentCell.ColumnIndex;

           行:DataGridView1.CurrentCell.RowIndex        

    2、当前单元格位置:DataGridView.CurrentCellAddress//结果:{X,Y}

          列:DataGridView.CurrentCellAddress.Y

          行:DataGridView.CurrentCellAddress.X

    第2种方法可以避免或者取消共享事件。

        /// <summary>
/// 单元格点击事件(在单元格的任何部分被单击时发生)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//获取当前点击的行列索引
MessageBox.Show("第"+e.RowIndex + "行,第"+ e.ColumnIndex+"列的值:"+dataGridView1.CurrentCell.Value);
//获取当前点击的位置{X=?,Y=?}
MessageBox.Show("位置:" + dataGridView1.CurrentCellAddress.ToString());
// 可以取消激活的单元格
dataGridView1.CurrentCell.Value = null;
} /// <summary>
/// 单元格内容点击事件(在单元格中的内容被单击时发生)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//获取当前点击的行列索引
MessageBox.Show("第"+e.RowIndex+"行,第"+e.ColumnIndex+"列的值:" + dataGridView1.CurrentCell.Value);
//获取当前点击的位置{X=?,Y=?}
MessageBox.Show("位置:"+dataGridView1.CurrentCellAddress.ToString());
// 可以取消激活的单元格
dataGridView1.CurrentCell.Value = null;
}

  二、DataGridView 设定单元格只读(ReadOnly/EditMode)

    核心:DataGridView1.ReadOnly = true;

       DataGridView1.EditMode= DataGridViewEditMode.EditProgrammatically

    1、指定单元格只读:

         所有:DataGridView1[columnIndex,rowIndex ].ReadOnly = true;

          列:DataGridView1.Columns[columnIndex].ReadOnly = true;

          行:DataGridView1.Rows[rowIndex].ReadOnly = true;

    2、EditMode

      //不能手动编辑单元格的内容。调用 DataGridView.BeginEdit 方法,使单元格进入编辑模式进行编辑

      DataGridView1.EditMode= DataGridViewEditMode.EditProgrammatically;

    3、CellBeginEdit

      //CellBeginEdit 事件来取消单元格的编辑

        /// <summary>
/// 在为选定的单元格启动编辑模式时发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (!(string.IsNullOrEmpty(dgv["Id", e.RowIndex].Value.ToString())))
{
e.Cancel = true;
}
}

  

  三、DataGridView 禁止列或者行的Resize

    核心:AllowUserToResizeColumns/AllowUserToResizeRows/Resizable

    1、所有的行列禁止

           列:  this.dataGridView1.AllowUserToResizeColumns = false;

           行: this.dataGridView1.AllowUserToResizeRows = false;

    2、指定行列Resizable      

           列: this.dataGridView1.Columns[0].Resizable = DataGridViewTriState.False;
           行: this.dataGridView1.Rows[0].Resizable = DataGridViewTriState.False;

    3、列宽和行高的最小值的设定 MinimumWidth /MinimumHeight

           列:DataGridView1.Columns[0].MinimumWidth = 100;

           行:DataGridView1.Rows[0].MinimumHeight = 50;

    4、禁止用户改变行头的宽度以及列头的高度

           列:DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

           行:DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing;

  四、DataGridView 列宽和行高自动调整的设定

    核心:DataGridViewAutoSizeRowsMode/DataGridViewAutoSizeColumnsMode

    1、设定行高和列宽自动调整

          列:DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

          行:DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

    2、第一列自动调整

          列:DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

    3、设定列头的高度和行头的宽度自动调整

          列:DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;

          行:DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

  五、DataGridView 冻结列或行

    核心:DataGridViewColumn.Frozen

    1、列冻结:DataGridViewColumn.Frozen 属性为 True 时,

          该列左侧的所有列被固定, 横向滚动时固定列不随滚动条滚动而左右移动

    2、行冻结:DataGridViewRow.Frozen 属性为 True 时,

          该行上面的所有行被固定, 纵向滚动时固定行不随滚动条滚动而上下移动。

      列:DataGridView1.Columns[1].Frozen = true;

      行:DataGridView1.Rows[2].Frozen = true;

  六、 DataGridView 列顺序的调整

    设定DataGridView 的AllowUserToOrderColumns 为 True 的时候, 用户可以自由调整列的顺序。

    当用户改变列的顺序的时候,其本身的index不会改变,但是DisplayIndex改变了,

    可以在代码中通过DisplayIndex 来改变列的顺序,顺序改变时候会引发ColumnDisplayIndexChanged事件

  七、DataGridView 剪切板的操作

    待研究补充

  八、DataGridView 单元格的ToolTip的设置

    1、ToolTip内容

    核心:DataGridView.ShowCellToolTips = True 的情况下, 单元格的 ToolTip 可以表示出来。

       对于单元格窄小,无法完全显示的单元格, ToolTip 可以显示必要的信息

      ALL:  DataGridView1[0, 0].ToolTipText = "该单元格的内容不能修改";

      列头:DataGridView1.Columns[0].ToolTipText = "该列只能输入数字";

      行头:DataGridView1.Rows[0].HeaderCell.ToolTipText = "该行单元格内容不能修改";

    2、CellToolTipTextNeeded 事件

    在批量的单元格的 ToolTip 设定的时候,单个指定那么设定的效率比较低,

    这时候可以利用CellToolTipTextNeeded 事件。当单元格的 ToolTipText 变化的时候也会引发该事件。

    但是,当DataGridView的DataSource被指定且VirualMode=True的时候,该事件不会被引发。

        /// <summary>
/// 在需要单元格的工具提示文本时发生。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e)
{
MessageBox.Show(e.ToolTipText.ToString());
}

CellToolTipTextNeeded

  九、DataGridView 的右键菜单(ContextMenuStrip)

    核心:ContextMenuStrip、 CellontextMenuStripNeeded、RowContextMenuStripNeeded

    DataGridView, DataGridViewColumn, DataGridViewRow, DataGridViewCell 有 ContextMenuStrip 属性。

    DataGridViewColumn 的 ContextMenuStrip 属性设定了 除了列头以外的单元格的右键菜单。

    DataGridViewRow 的 ContextMenuStrip 属性设定了除了行头以外的单元格的右键菜单。

    DataGridViewCell的 ContextMenuStrip 属性设定了指定单元格的右键菜单

    1、DataGridView 的ContextMenuStrip 设定

      DataGridView1.ContextMenuStrip = this.ContextMenuStrip1;

    2、列的 ContextMenuStrip 设定

      DataGridView1.Columns[0].ContextMenuStrip = this.ContextMenuStrip2;

    3、 列头的ContextMenuStrip 设定

      DataGridView1.Columns[0].HeaderCell.ContextMenuStrip = this.ContextMenuStrip2;

    4、 行的 ContextMenuStrip 设定 

      DataGridView1.Rows[0].ContextMenuStrip = this.ContextMenuStrip3;

    5、 单元格的 ContextMenuStrip 设定

       6、CellContextMenuStripNeeded

      在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。

    7、RowContextMenuStripNeeded

        /// <summary>
/// 在需要单元格的快捷菜单时发生。CellContextMenuStripNeeded
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
e.ContextMenuStrip = this.contextMenuStrip1;
}

CellContextMenuStripNeeded

  十、DataGridView 单元格表示值的自定义

    核心:CellFormatting

    1、//CellFormatting 事件处理方法   

    CellFormatting事件的DataGridViewCellFormattingEventArgs对象的Value属性一开始保存着未被格式化的值。

    当Value属性被设定表示用的文本之后,把FormattingApplied属性做为True,告知DataGridView文本已经格式化完毕。

    如果不这样做的话,DataGridView会根据已经设定的Format,NullValue,DataSourceNullValue,FormatProvider属性会将Value属性会被重新格式化一遍。

        /// <summary>
///在单元格的内容需要设置格式以便于显示时发生 CellFormatting
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
// 如果单元格是“id”列的单元格
if (dgv.Columns[e.ColumnIndex].Name == "Id" && e.Value is string)
{
// 将单元格值改为大写
string str = e.Value.ToString();
e.Value = str.ToUpper();
// 应用该Format,Format完毕。
e.FormattingApplied = true;
}
}

CellFormatting 事件处理方法

   十一、DataGridView 用户输入时,单元格输入值的设定

    核心:CellParsing

    1、//CellParsing 事件处理方法

        /// <summary>
/// CellParsing 事件处理方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
DataGridView dgv = (DataGridView)sender; //单元格列为“Id”时
if (dgv.Columns[e.ColumnIndex].Name == "Id" && e.DesiredType == typeof(string))
{
//将单元格值设为大写
e.Value = e.Value.ToString().ToUpper();
//解析完毕
e.ParsingApplied = true;
}
}

CellParsing 事件处理方法

参考文献:https://blog.csdn.net/u010655348/article/details/52952615

==============================================

==============================================

二、winForm-DataGridView操作——DataGridView 操作、属性说明的更多相关文章

  1. c# winform 关于DataGridView的一些操作(很全,绝对够用)

    转自:http://heisetoufa.iteye.com/blog/405317 设置字段名 设置字段值 设定单元格表示 Error图标 设定当前单元格 取得当前单元格内容 取得当前单元格的列 I ...

  2. C# winform关于DataGridView的一些操作

    设置字段名 设置字段值 设定单元格表示 Error图标 设定当前单元格 取得当前单元格内容 取得当前单元格的列 Index 取得当前单元格的行 Index 向下一行 向上一行 取消 DataGridV ...

  3. c# winform 关于DataGridView的一些操作

    转自:http://heisetoufa.iteye.com/blog/405317 设置字段名 设置字段值 设定单元格表示 Error图标 设定当前单元格 取得当前单元格内容 取得当前单元格的列 I ...

  4. 将listBox中信息显示在dataGridview中,操作datagridview后删除listBox信息和SQL数据库信息 续(浅谈listBox..)

    应用场景      对datagridview控件使用了解,以及操作datagridview选中的信息删除,并且有二次确认后才删除用户信息.相应的删除listbox中用户信息,下面一起看看需要哪些准备 ...

  5. DataGridView一些常用操作

    SqlConnection conn = new SqlConnection('Server=(local);DataBase=test;User=sa;Pwd=sa'); SqlDataAdapte ...

  6. C#:DataGridView控件操作

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  7. jQuery二——属性操作、文档操作、位置属性

    一.jquery的属性操作 jquery对象有它自己的属性和方法. 其中jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作. 1.html属性操作 是对htm ...

  8. jQuery使用(二):DOM样式操作和属性操作

    DOM取值与赋值 .html() .text() .size() 1.html()方法类似原生DOM的属性innerHTML,不传入参数的时候默认为取指定元素内的HTML内容,包含前后空白文本结构,以 ...

  9. Winform开发之DataGridView事件和属性

    DataDridView的事件和属性非常多,一一介绍还是不现实,这里借鉴一下园友和MSDN上的介绍吧 1.C#中 DataGridView 属性说明(转载) 2.MSDN上DataGridView事件 ...

随机推荐

  1. 效率类APP原型制作分享----Timeglass

    本原型由国产Mockplus(原型工具)和iDoc(智能标注,一键切图工具)提供. 主要页面:启动页面.主页.添加事件页面.设置页面等. mp文件下载:点击这里 在线预览:http://run.moc ...

  2. Minimum Size Subarray Sum LT209

    Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...

  3. Vue单页面应用

    单页面应用指一个系统只加载一次资源,然后下面的操作交互.数据交互是通过router.ajax来进       行,页面并没有刷新:<1>在vue搭建的环境里面怎么有没有公用的css和js? ...

  4. windows + php7.1 + redis3.1.4

    首先确定PHP版本(MSVC14 x64 NTS) 下载redis扩展 拷贝php ext目录,修改php.ini配置,添加 extension=php_redis.dll 重启apache,确认re ...

  5. python中从内部循环直接跳出多层循环

    学习循环的时候碰到一道题,需要从内部循环中直接跳出所有循环,想了很久终于想到一种好办法(小白认知) 题目为:使用while循环输出100-50,从大到小,到50时,再循环输出0-50,从小到大. ex ...

  6. 为什么要选择OMP之合规性

  7. 谈互联网开放平台:“去中心化”大势所趋 zz

    文/磐石之心 几天前与好友聊到众筹咖啡馆的事情,他向我讲述了一个非常具有特色的众筹咖啡馆案例.而这个案例也引发我对当前互联网开放.去中心和集权的一些思考,今天就简单写出来与大家分享. 一个无赚钱目的的 ...

  8. 2018.11.01 bzoj4325: NOIP2015 斗地主(贪心+搜索)

    传送门 原来一直以为是一道大模拟. 没想到是一道搜索+最优性剪枝 如何搜最优呢? 我们考虑怎么最快出完. 大概是应该尽量出当前能出出去最多的吧. 于是我们选择优先出顺子. 这样做有什么好处呢? 我们会 ...

  9. CodeForces 916C Jamie and Interesting Graph (构造)

    题意:给定两个数,表示一个图的点数和边数,让你构造出一个图满足 1-  n 的最短路是素数,并且最小生成树也是素数. 析:首先 1 - n 的最短路,非常好解决,直接 1 连 n 就好了,但是素数尽量 ...

  10. celery 4.1下报kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable 处理方式

    #python代码如下 from celery import Celeryimport subprocess app = Celery('tasks', broker='redis://localho ...