为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

DataGridView添加行号

2018-04-30 8页 doc 47KB 20阅读

用户头像

is_841159

暂无简介

举报
DataGridView添加行号DataGridView添加行号 自己在做WINFORM小玩意的时候需要在datagridview上显示行号,上网搜索一下,找到如下 代码,不错,先记录下来了。 在RowPostPaint事件中画出来 C#代码 1. // 绘制行号 2. private void gvdata_RowPostPaint(object sender, DataGridViewRowPostPaintE ventArgs e) 3. { 4. try 5. { 6. 7. Rectangle rectangle = new ...
DataGridView添加行号
DataGridView添加行号 自己在做WINFORM小玩意的时候需要在datagridview上显示行号,上网搜索一下,找到如下 代码,不错,先记录下来了。 在RowPostPaint事件中画出来 C#代码 1. // 绘制行号 2. private void gvdata_RowPostPaint(object sender, DataGridViewRowPostPaintE ventArgs e) 3. { 4. try 5. { 6. 7. Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, 8. 9. Convert.ToInt32(e.RowBounds.Location.Y + (e.RowBounds.Height - gvdata.RowHeade rsDefaultCellStyle.Font.Size) / 2), 10. 11. gvdata.RowHeadersWidth - 4, e.RowBounds.Height); 12. 13. TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), 14. 15. gvdata.RowHeadersDefaultCellStyle.Font, rectangle, gvdata.RowHeadersDefaultCellSt yle.ForeColor, 16. 17. TextFormatFlags.Right); 18. 19. 20. 21. } 22. 23. catch (Exception ex) 24. { 25. 26. Console.Write("dgv1_RowPostPaint:" + ex.Message); 27. 28. } 29. } 效果如图: /* #region dataGridView //显示行号 private void dataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dataGridView.RowHeadersWidth - 8, e.RowBounds.Height); TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dataGridView.RowHeadersDefaultCellStyle.Font, rectangle, dataGridView.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); } #endregion private void dataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { try { //添加行号 SolidBrush v_SolidBrush = new SolidBrush(dataGridView.RowHeadersDefaultCellStyle.ForeColor); int v_LineNo = 0; v_LineNo = e.RowIndex + 1; string v_Line = v_LineNo.ToString(); e.Graphics.DrawString(v_Line, e.InheritedRowStyle.Font, v_SolidBrush, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5); } catch (Exception ex) { MessageBox.Show("添加行号时发生错误,错误信息:" + ex.Message, "操作失败"); } } */ 人云亦云,我为DataGridView控件显示行号正名 前些天在写个小程序,用到DataGridView,想给它动态的显示行号。不是很费劲GOOGLE了一下, 这GOOGLE不要紧,发现了不少问题。以下基本上都是GOOGLE搜索出来的网上的一些解决方法,千 篇一律都是这样的: private void DataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { for (int i = 0; i < e.RowCount; i++) { this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString(); } for (int i = e.RowIndex + e.RowCount; i < this.dgvKBRollUp.Rows.Count; i++) { this.dgvKBRollUp.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.dgvKBRollUp.Rows[i].HeaderCell.Value = (i + 1).ToString(); } } private void DataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) { for (int i = 0; i < e.RowCount; i++) { this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString(); } for (int i = e.RowIndex + e.RowCount; i < this.dgvKBRollUp.Rows.Count; i++) { this.dgvKBRollUp.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.dgvKBRollUp.Rows[i].HeaderCell.Value = (i + 1).ToString(); } } 只要用过这段代码的人就应该发现这段代码是运行出错的。原因就出在RowsRemoved事件里,会抛出一个Index outof range的异常。然而就是这么一段有错的代码,几乎充斥着整个互联网,千篇一律的COPY,没有一个人纠正。 先说下这段代码出错的原因吧: 在RowsRemoved事件里,最开始生成DataGridView的数据的时候,也是会触发这个事件的。这个时候DataGridView控件的Rows.Count就是0。那下面这行代码就有问题了: this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; e.RowIndex + i,这里对应的是Rows[0],但是Rows.Count还是0啊,Rows[0]是不存在的。要存在Rows[0]起码DataGridView控件要有一行才行。为了避免这个错误,小小的修改代码就行了: private void dgvKBRollUp_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) { if (dgvKBRollUp.Rows.Count != 0) { for (int i = 0; i < e.RowCount; i++) { this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.dgvKBRollUp.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString(); } for (int i = e.RowIndex + e.RowCount; i < this.dgvKBRollUp.Rows.Count; i++) { this.dgvKBRollUp.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.dgvKBRollUp.Rows[i].HeaderCell.Value = (i + 1).ToString(); } } 只要加上一个对Rows.Count的判断就可以避免这个错误。希望网上的一些COPY的朋友也要注意了,以 后COPY过来的时候,自己还是要动手验证一下。将一个错误的信息胡乱的传播是对一些新手以及自己都 不怎么好的。 最后附上微软MSDN里面关于e.RowIndex和e.RowCount的一段代码: System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder(); messageBoxCS.AppendFormat("{0} = {1}", "RowIndex", e.RowIndex); messageBoxCS.AppendLine(); messageBoxCS.AppendFormat("{0} = {1}", "RowCount", e.RowCount); messageBoxCS.AppendLine(); MessageBox.Show(messageBoxCS.ToString(), "RowsRemoved Event"); 通过这段代码你可以很轻松地跟踪事件参数里的e.RowIndex和e.RowCount的值。当然你可以DEBUG, 一样的。我就是DEBUG的?O(?_?)O~
/
本文档为【DataGridView添加行号】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索