1.不让DataGridView控件自动生成列

设置AutoGenerateColumns 为false.

dgTicket.AutoGenerateColumns = false; //将自动生成列禁用

2.DataGridView中RowsAdded事件的注意事项

在ASP.NET中的GridView控件在显示绑定数据时有一个RowDataUpdated事件,在其事件响应函数里可以逐行扫描每行所绑定的数据,根据需要可以修改GridView显示的格式或Value等,比较方便。

而在WinForm工程中,与之类似的DataGridView控件,只有RowsAdded事件与之类似,但与GridView不同的是,RowsAdded事件的响应不像RowDataUpdated那样逐条响应,我在Debug很久才发现这个问题,其实只要看到DataGridViewRowsAddedEventArgs e的属性中的RowCount就明白,RowsAdded事件响应时可能插入多行,也可能插入单行(Rows可是复数形式,笨)。故,使用e.RowIndex获取插入行的索引值,e.RowCount获取插入行的数量,使用这两个变量可以方便地遍历所绑定的数据,代码如下所示:

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
int rowIndex = e.RowIndex;
int rowCount = e.RowCount;
for (int i = rowIndex; i < rowIndex + rowCount; i++)
{
//绑定的为List<AccountInfo>数据集,此处获取指定行绑定的数据
AccountInfo info = this.dataGridView1.Rows[i].DataBoundItem as AccountInfo; /////////////////////////////////////////
// 其他数据操作等
///////////////////////////////////////////
}
}

3.与asp.net RowDataBound 等价的事件是CellFormatting 事件

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
//bala bala
}

4.获取DataGridViewCheckBoxCell的选中状态

private void butUpdate_Click(object sender, EventArgs e)
{
bool IsCheck = false;
int count = this.dataGridView1.RowCount;
Merchandise_Info mi = new Merchandise_Info();
for (int i = 0; i < count; i++)
{
//if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) == true)
if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).EditedFormattedValue) == true)
{
mi.Name = this.dataGridView1.Rows[i].Cells["TypeName"].Value.ToString();
IsCheck = true;
MessageBox.Show(this.dataGridView1.Rows[i].Cells["TypeName"].Value.ToString());
} }
if (IsCheck == false)
{
MessageBox.Show("请先选择要修改的行!", "系统提示");
}
}

解释:(DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0] //先把行i第0列(行i第0列里放的是CheckBox控件)的转换成DataGridViewCheckBoxCell

(bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) //在转换成bool类型!

最关键的地方是:以下是通过两种方式判断CheckBox的选中状态!

(1)if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) == true)
(2)if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).EditedFormattedValue) == true)

两者的区别是:如果你采用(1)方法,则你必须先给CheckBox控件设初始值(要先把CheckBox的值设为已选或为选或者你要先把CheckBox勾上,总之你要动一下CheckBox或者给他先赋值),否则会出错:“未将对象引用设置到对象的实例。”

如果你采用方法(2)则不用给CheckBox控件设初始值,EditedFormattedValue是获得单元格当前格式化的值,而不考虑当前单元格是否是处于编辑状态,也不论也不论是否尚未提取此值!所以不用给CheckBox控件设初始值。

哈哈!获得是否选中后就可以获得选中行的值了!!

5.设置行高

//设置行高为21px
   this
.dataGridView1.RowTemplate.Height = 21;
  
// 禁止用户改变DataGridView1的所有列的列宽
     DataGridView1.AllowUserToResizeColumns = false;
     //禁止用户改变DataGridView1所有行的行高
     DataGridView1.AllowUserToResizeRows = false;

winform DataGridView控件开发经验的更多相关文章

  1. C#实现WinForm DataGridView控件支持叠加数据绑定

    我们都知道WinForm DataGridView控件支持数据绑定,使用方法很简单,只需将DataSource属性指定到相应的数据源即可,但需注意数据源必须支持IListSource类型,这里说的是支 ...

  2. Winform DataGridView控件添加行号

      有很多种方法,这里介绍三种: A: 控件的RowStateChanged事件中添加,RowStateChanged事件是在行的状态更改(例如,失去或获得输入焦点)时发生的事件: e.Row.Hea ...

  3. 实现winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部

    判断 DataGridView控件滚动条是否滚动到当前已加载的数据行底部,其实方法很简单,就是为DataGridView控件添加Scroll事件,然后写入以下代码就可以了,应用范围:可实现分部加载数据 ...

  4. winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部 z

    http://www.zuowenjun.cn/post/2015/05/20/162.html 判断 DataGridView控件滚动条是否滚动到当前已加载的数据行底部,其实方法很简单,就是为Dat ...

  5. WinForm DataGridView控件、duck布局

    1.DataGridView控件 显示数据表 (1)后台数据绑定: List<xxx> list = new List<xxx>(); dataGridView1.DataSo ...

  6. Winform DataGridView控件在业务逻辑上的简单使用

    需要对文字列表进行处理,然后用到DataGridView控件来处理,记录一下.效果如下: 主要是想通过禁用和取消单元格选择来使图标单元格呈现出鼠标点击的效果.因为有个单元格选择的问题困扰着我. 是这样 ...

  7. winform datagridview控件使用

    最近做项目时,显示查询结果总需要绑定到datagridview控件上显示,总结了给datagridview绑定数据的方式,以及导出datagridview数据到excel表格,如有错误请多指教 1.直 ...

  8. Winform(DataGridView)控件及通过此控件中实现增删改查

    DataGridView:显示数据表,通过此控件中可以实现连接数据库,实现数据的增删改查 一.后台数据绑定:    List<xxx> list = new List<xxx> ...

  9. 如何在winform DataGridView控件的DataGridViewButtonColumn按钮列中禁用按钮

    原文:http://msdn.microsoft.com/en-us/library/ms171619(v=vs.85).ASPX public class DataGridViewDisableBu ...

随机推荐

  1. JAVA(int...i)问题

    第一次看到这种写法,弄不明白到底会是神马结果,运行后才发现是这么的神奇. 无论你调用的方法中带几位参数,“hello”一直可以被输出.

  2. Shell指令

    Shell指令 1.Shell原理图 2.Shell指令的基本语法 Shell指令 Shell –选项 参数 Shell –选项 Shell参数 3.常用的Shell指令 1)ls指令:显示文件信息 ...

  3. java中的异常处理机制_函数覆盖时的异常特点

    /*注意:异常声明在函数上 异常在子父类覆盖时的体现1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者异常的子类2.如果父类方法抛出多个异常,那么子类在覆盖该方法 ...

  4. input中的id和name

    name在以下用途是不可替代的: 1. 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.因为有许多name会同时对应多个控件,比如checkbox和radio,而id必须是全文 ...

  5. storm 入门

    Storm的典型用例有哪些呢? 流处理:正如前面的例子中所展示的,和其他流处理系统不同的是,使用Storm不需要中间队列. 连续计算:向客户端持续发送数据,以便它们能实时更新.显示结果,例如网站统计. ...

  6. 2_1我的第一个应用hello world[wp8特色开发与编程技巧]

    2_1hello world -5min 大家好,我是徐文康,在上一个视频当中我们已经讲了,如何根据自己电脑系统去下载相应的SDK. 你可能花了很多时间去安装以及配置好了这个开发环境,如果还没有配置好 ...

  7. 【风马一族_xml】xml语法

    xml语法 文档声明 用来声明xml的属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容 & ...

  8. 基于BT协议的文件分发系统

    基于BT协议的文件分发系统构成:    1.一个Web服务器:保存着种子文件    2.一个种子文件:保存共享文件的一些信息(文件名,文件大小    ,Tracker服务器地址,torrent为后缀) ...

  9. 百度编辑器(Ueditor)最新版(1.4.3.3)插入锚点失败原因分析及BUG修复

    用百度编辑器——Ueditor(版本1.4.3.3,2016-05-18日上线)插入锚点的时候,每次总是失败,百思不得其解.通过分析Ueditor的代码ueditor.all.js,可以看出Uedit ...

  10. 用canvas 绘制的饼状统计图、柱状统计图、折线统计图

    canvas 绘制的饼状统计图 canvas 绘制的柱状统计图 canvas 绘制的折线统计图