C# RowStateChanged事件中,判断某列是否有值再增加行号有错误

问题描述

我使用RowStateChanged方法为datagridview设置行号,privatevoiddgvFlowPath_RowStateChanged(objectsender,DataGridViewRowStateChangedEventArgse){//显示行号e.Row.HeaderCell.Value=string.Format("{0}",e.Row.Index+1);}如果仅仅是使用上述代码没有任何问题,现在问题的关键是,在画面load的时候,我add了40行的空白行,使用上述代码,40行都会有行号,而我只需要将datagridview上有数据的行显示行号,没有数据的行不需要行号,但是空白行还是需要显示的,我使用了如下代码进行判断privatevoiddgvFlowPath_RowStateChanged(objectsender,DataGridViewRowStateChangedEventArgse){if(dgvFlowPath.Rows.Count>0){if(Convert.ToString(e.Row.Cells["OperateNo"].Value)!=""){//显示行号e.Row.HeaderCell.Value=string.Format("{0}",e.Row.Index+1);}}}画面加载或刷新的时候不显示行号,如果我将右面的滚动条下拉,然后再上拉,行号就显示出来了,请问各位大虾,该如何解决?

解决方案

解决方案二:
如果数据量不大,换RowPostPaint事件自己画行号试试。
解决方案三:
这行号你就不能作为数据的一列条件吗,为何要在事件里去添加。而且你判断下其他列是否全是空就是空行,或者直接加个隐藏列表示是空行,判断下不就行了
解决方案四:
楼上说的有道理
解决方案五:
但是在事件中为什么就不能进行判断了呢?断点显示都是正常的,就是显示的时候有问题
解决方案六:
if(Convert.ToString(e.Row.Cells["OperateNo"].Value)!="")改if(!string.IsNullOrEmpty(Convert.ToString(e.Row.Cells["OperateNo"].Value))试试
解决方案七:
我没有使用过dev,不知道它具体的机制。我给你说一下大多数高级的UI组件的做法。大型的Grid组件都不是像你想象的那样去有无数的“行视图”的,它们不会有上万行可见的行视图,它们通常会循环复用少数几十个行视图来显示上万、数十万数据。也就是说,当你用鼠标向下拉动时从Grid底部进入的行视图会复用之前从顶部消失的一些行视图,当你用鼠标向上拉动时从Grid顶部进入的行视图会复用之前从底部消失的一些行视图,在内存中总是仅仅保留一少部分行视图对象,而不会随着数据行的多少而增加。比如说一共有100行数据,那么控件可能只会用30个行视图来循环显示(绑定)这100行数据。因此Grid控件的许多事件,是说控件的行视图底层的事件触发了,它假设你懂的行视图本身就是重复使用的,它给你机会来硬编码。例如有些早已经滚动出可见区域的row,假设某一行的某个单元已经设置了背景为红色,那么当它用于新的滚动入可见区域的行时,假设相同单元也需要设置背景为红色,那么你就不需要再去设置了,它已经是红色的了。反之,假设新数据根本不需要设置为红色背景,此时你会发现新数据的背景却是红色的(除非你刻意重设置了背景)。因此在这类Grid组件中,通常都有类似Grid_RowExited、Grid_RowEntering

之类的事件,让你对行视图做手工清理、或者重新初始化。如果不做这些处理,你会发现你直接从行视图去获得信息是乱的(出现了根本不该有的数据)。在使用这类UI组件的编程中,通常不应该直接读取行视图,也就是不应该写e.Row.Cells["OperateNo"]这种语句,而应该读取e.Row所绑定的数据源中数据行的值。因为行视图的相关事件触发时,是底层行视图控件本身的事件,此时你去读取的完全可能是之前滚动出Grid可见区域的缓存着的Row控件的数据,而不是当前滚动进入可见区域的数据,此时应该读取数据源上的数据而不是控件的数据。如果你根据这个原理而设计测试用例,是可以轻易发现这两个数据读取方式返回的结果是不一样的。
解决方案八:
sp1234牛
解决方案九:
CellFormatting这个事件

时间: 2024-08-08 16:36:15

C# RowStateChanged事件中,判断某列是否有值再增加行号有错误的相关文章

怎么样从gridview中获取一列数据的值?没分了,还望各位大哥帮帮忙!!谢谢

问题描述 单击gridview控件外部的一个按钮,怎么获取gridview中的一列数据? 解决方案 解决方案二:用循环啊foreach(GridViewRowmyrowinGridView1.Rows){stringlie=myrow.Cells[0].Text;}解决方案三:引用楼主wolf_268的帖子: 单击gridview控件外部的一个按钮,怎么获取gridview中的一列数据? 楼上的大哥说的yes!!!!!!!!解决方案四:帮顶!解决方案五:问一下,下边的"GridViewRow&q

怎么样从gridview中获取一列数据的值?再怎么把获得的数据插入到另一个表中?没分了,还望各位大哥帮帮忙!!谢谢

问题描述 单击gridview控件外部的一个按钮,怎么获取gridview中的一列数据?获得的数据怎么插入到另一个表中,比如说那个表名是a 解决方案 解决方案二:FindControl获取RowIndex,再cells[i].text解决方案三:你根据ID查询出来值,然后再把值添加到a表这样就可以了吧!解决方案四:DataTabledt=newDataTable();dt.Columns.Add("col1");foreach(GridViewRowgvrinGridView1.Row

C# 获取ListView中某一列的全部值

问题描述 我的窗口上添加了一个ListView,代码如下:<ListViewHeight="179"HorizontalAlignment="Left"Margin="0,26,75,0"Name="listView1"VerticalAlignment="Top"Width="428"ItemsSource="{Binding}"VerticalContent

WinForm中TextBox 中判断扫描枪输入与键盘输入

本文转载:http://www.cnblogs.com/Hdsome/archive/2011/10/28/2227712.html    提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我们就要判断输入设备是手工还是扫描枪.      尝试的方法:      1.将TextBox属性设为ReadOnly=true.结果:无法输入.      2.

数据-DataTable中 判断某一列是否相同 相同的话其他列进行相加

问题描述 DataTable中 判断某一列是否相同 相同的话其他列进行相加 如图:当姓名相同时,相同姓名的房租,水电等信息做相加操作 数据以取出到datatable中的了 解决方案 你在取数据的时候就可以进行运算.写一个sql参考http://zhidao.baidu.com/link?url=ZS7O3u6WmEWLTDDPaIF_pworqjNOWRjNsMl7Jmjws3peIZc66YnIakO_X1ziSvuh7efg8QDCVHsPzRvIzQGfZ07iwCi283z4bJuPwi

在图片控件MouseMove事件中,如何判断鼠标是否点击了

问题描述 我在pictureBox2_MouseMove(objectsender,MouseEventArgse)事件中,如何判断鼠标是否有点击了例如:pictureBox2_MouseMove(objectsender,MouseEventArgse){dosomething;if(鼠标已被左击)//求这里怎么判断{dosomething}} 解决方案 解决方案二:我任务你在鼠标移动里做个BOOL变量,再在鼠标单击中判断这个变量,

SQL判断某列中是否包含中文字符、英文字符、纯数字

原文:SQL判断某列中是否包含中文字符.英文字符.纯数字 一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二.包含英文字符 select * from 表名 where 列名 like '%[a-z]%'  三.包含纯数字 select * from 表名 where 列名 like '%[0-9]%'

Sql Server中判断表、列不存在则创建的方法

一.Sql Server中如何判断表中某列是否存在 首先跟大家分享Sql Server中判断表中某列是否存在的两个方法,方法示例如下: 比如说要判断表A中的字段C是否存在两个方法: 第一种方法 IF EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID=T2.ID WHERE T1.NAME='A' AND T2.NAME='C' ) PRINT '存在' ELSE PRINT '不存在' 第二种方法,短小精

查找Table中的单个列长度并判断是否属于改表(存储过程)

存储过程 做程序有时候,要判断某列是否属于操作表,对比有些烦就写了一个存储过程. create proc Pr_getTableColumnLen(--传入的表名和列名@inTableName varchar(20),@inColumnName varchar(20), --传入的标志变量和内容变量@lenContent varchar(200),@flag varchar(1)) as --内部变量declare@rColumnName varchar(20),@rColumnType var