Winform datagridview相关操作
datagridview显示行号的2种方法:
方法一:
网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号:
privatevoiddataGridView1_RowPostPaint(objectsender, DataGridViewRowPostPaintEventArgs e)
{
try
{
e.Graphics.DrawString((e.RowIndex + ).ToString(), e.InheritedRowStyle.Font, new SolidBrush(Color.CadetBlue), e.RowBounds.Location.X + , e.RowBounds.Location.Y + );
}
catch(Exception ex)
{
MessageBox.Show("添加行号时发生错误,错误信息:"+ex.Message, "操作失败");
}
}
但是这种方法在大数据量的时候性能比较差,每次滚动数据都会触发RowPostPaint事件。
方法二:
我的做法是给每行的HeaderCell赋值。
在网上发现有人提到这种做法,但是因为最后的显示问题而选择了上面的方法。具体问题就是,在行号超过2位,如100、,在选中该行时,DataGridView的行指示符▶会把行号往右挤,导致现实不全,100的时候显示▶。
其实还是RowsHeaderWidth的大小有问题,将该列的宽度放大,行号显示的也没问题!
不知道他们有没有试过,上面绘制行号的方法在大行号的情况下显示也会有问题。
既然知道问题所在就要找到相应的解决方法。
具体做法是将DataGridView的RowsHeaderWidthSizeMode属性设置为AutoSizeToAllHeaders或者AutoSizeToDisplayedHeaders,这样自动设置宽度就不会出现行指示符挤压行号的情况了。
对于每次DataGridView的行变化,我们都去更新行号,用RowsAdded和RowsRemoved事件。
代码如下:
RowsAdded & RowsRemoved
privatevoidDataGridView1_RowsAdded(objectsender, DataGridViewRowsAddedEventArgs e)
{
for(inti =; i <e.RowCount; i++)
{
this.DataGridView1.Rows[e.RowIndex +i].HeaderCell.Style.Alignment =DataGridViewContentAlignment.MiddleRight;
this.DataGridView1.Rows[e.RowIndex +i].HeaderCell.Value =(e.RowIndex +i +).ToString();
}
for(inti =e.RowIndex +e.RowCount; i <this.DataGridView1.Rows.Count; i++)
{
this.DataGridView1.Rows[i].HeaderCell.Style.Alignment =DataGridViewContentAlignment.MiddleRight;
this.DataGridView1.Rows[i].HeaderCell.Value =(i +).ToString();
}
} privatevoidDataGridView1_RowsRemoved(objectsender, DataGridViewRowsRemovedEventArgs e)
{
for(inti =; i <e.RowCount; i++)
{
this.DataGridView1.Rows[e.RowIndex +i].HeaderCell.Style.Alignment =DataGridViewContentAlignment.MiddleRight;
this.DataGridView1.Rows[e.RowIndex +i].HeaderCell.Value =(e.RowIndex +i +).ToString();
}
for(inti =e.RowIndex +e.RowCount; i <this.DataGridView1.Rows.Count; i++)
{
this.DataGridView1.Rows[i].HeaderCell.Style.Alignment =DataGridViewContentAlignment.MiddleRight;
this.DataGridView1.Rows[i].HeaderCell.Value =(i +).ToString();
}
}
datagridview 指定列,进行绑定,不绑定的列不显示:
:Winform项目 中:
private void Form_Load(object sender, EventArgs e)
{
//禁止自动生成列
this.datagridview1.AutoGenerateColumns = false;
}
:Web项目中:
设置datagridview 的AutoGenerateColumns 属性为False
C#dataGridView显示menuStrip
拖一个ContextMenuStrip,设置dataGridView的ContextMenuStrip属性绑定快捷菜单即可。 设置DataGridView只能选中一行:
this.dataGridView.MultiSelect = false;
Winform datagridview相关操作的更多相关文章
- DataGridView 相关操作
一.单元格内容的操作// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Consol ...
- c# datagridview 相关操作。
string[] newRow = {"long","d","b"}; Gridview.Rows.Insert(Gridview.Rows ...
- winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部 z
http://www.zuowenjun.cn/post/2015/05/20/162.html 判断 DataGridView控件滚动条是否滚动到当前已加载的数据行底部,其实方法很简单,就是为Dat ...
- C# winform DataGridView 常见属性
C# winform DataGridView 属性说明① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行.列的隐藏和删 ...
- 从零自学Hadoop(20):HBase数据模型相关操作上
阅读目录 序 介绍 命名空间 表 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...
- 从零自学Hadoop(21):HBase数据模型相关操作下
阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...
- 理解CSV文件以及ABAP中的相关操作
在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...
- Liunx下的有关于tomcat的相关操作 && Liunx 常用指令
先记录以下liunx下的有关于tomcat的相关操作 查看tomcat进程: ps-ef|grep java (回车) 停止tomcat进程: kill -9 PID (进程号如77447) (回车) ...
- pip的相关操作
>Python中的pip是什么?能够做些什么? pip是Python中的一个进行包管理的东西,能够下载包.安装包.卸载包......一些列操作 >怎么查看pip的相关信息 在控制台输入: ...
随机推荐
- 关于MANIFEST.MF的理解
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息. 在Java平台中, M ...
- [转]Spring数据库读写分离
数据库的读写分离简单的说是把对数据库的读和写操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力. 主(master)数据库提供写操作,从(slave)数据库提供读操作,其实在 ...
- Map集合的两种遍历方式
Map集合:即 接口Map<K,V> map集合的两种取出方式: 1.Set<k> keyset: 将map中所有的键存入到set集合(即将所有的key值存入到set中) ...
- 获取iframe 内元素的方法
1,原生的方法 首先给iframe 设置 id 属性 var obj = document.getElementById('iframe').contentWindow; setTimeout(fun ...
- Could not find artifact com.sun:tools:jar:1.5.0解决方法
可以参照在XP系统下搭建maven环境出的问题 Unable to locate the Javac Compiler in: C:\Program Files\Java\jre6\..\lib\to ...
- Linq JsRender
http://blog.csdn.net/linfei721/article/details/8973683
- 08_rlCoachKin自主编译,调试
为了知道参数的意思,以及为了从头建立一个项目,我从使用QTCreator来单独建立项目(当然也可以直接使用源代码中建立好的VS项目). 其实也推荐 VS2010调试 如果是用自带的VS项目,那么我们需 ...
- LNK1169 和 LNK2005
错误重现: 1> vs2010创建 C++ win32 project, Application type: DLL. 2>为了在工程中使用 CString, 在 stdafx.h 中 I ...
- 在linux环境下配置node:node + npm + forever
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3574582.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- 水题~~~~HDU 4788
Description Yesterday your dear cousin Coach Pang gave you a new 100MB hard disk drive (HDD) as a gi ...