dataGridView中两列的值比较大小

问题描述

for(inti=0;i<dataGridView1.Rows.Count;i++){if(Convert.ToInt32(dataGridView1.Rows[i].Cells[4].Value.ToString())>Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value.ToString())){dataGridView1.Rows[i].ErrorText="实际入库量不能大于订购量";MessageBox.Show("实际入库量不能大于订购量");e.Cancel=true;}}我想比较3、4列两个单元的值,但这样写不行,说什么对象没初始化,请问该怎么改或者有什么更好的方法实现,O(∩_∩)O谢谢!!

解决方案

解决方案二:
strings1=dataGridView1.Rows[i].Cells[4].Value.ToString();strings2=dataGridView1.Rows[i].Cells[3].Value.ToString();如果是数值型的,最好转成数值再比较,比较真实,字符串的大小比较有时候可能结果不是你想要的,decimald1=(decimal)dataGridView1.Rows[i].Cells[4].Value.ToString();decimald2=(decimal)dataGridView1.Rows[i].Cells[3].Value.ToString();对象没有初始化,有可能是在你写的代码的事件加载时,dataGridView1尚没有数据.
解决方案三:
引用1楼ccy_qty的回复:

strings1=dataGridView1.Rows[i].Cells[4].Value.ToString();strings2=dataGridView1.Rows[i].Cells[3].Value.ToString();如果是数值型的,最好转成数值再比较,比较真实,字符串的大小比较有时候可能结果不是你想要的,decimald1=(decimal)dataG……

转换为数字类型是肯定的。另外要注意所在的事件。
解决方案四:
在转换前你得确认获取的值是不是为空啊,然后再进行转换,不然会出错下面这样就是转换失败的时候值为0doubled1=0.0;double.TryParse(dataGridView1.Rows[i].Cells[4].Value.ToString(),outd1);

解决方案五:
总结:先dataGridView1.Rows[i].Cells[n].Value判断是否为空然后数据类型转换然后再比较
解决方案六:
引用楼主abcwlm的回复:

云下载与传统下载的区别和优势...与英特尔合作,EMC的云安全产品...物联网与云计算是什么关系?怎样选择基于SaaS的IT服务管理...CIO对公共云的顾虑是什么?for(inti=0;i<dataGridView1.Rows.Count;i++)……

你的事件应该是写在Validated或Validating中的吧,应该先用e.fomattedvalue.tostring.trim判断单元格是否为空(包含null和空格),当不为null或空的时候再用你的代码进行比较.因为dgv单元格在没赋值的时候取出来的值是nothing(null)
解决方案七:
引用5楼xiaolinyouni的回复:

引用楼主abcwlm的回复:云下载与传统下载的区别和优势...与英特尔合作,EMC的云安全产品...物联网与云计算是什么关系?怎样选择基于SaaS的IT服务管理...CIO对公共云的顾虑是什么?for(inti=0;i<dataGridView1.Rows.Count;i++)……你的事件应该是写在Validated或Valid……

我是想在第四列输入数据时进行判断
解决方案八:
引用5楼xiaolinyouni的回复:

引用楼主abcwlm的回复:云下载与传统下载的区别和优势...与英特尔合作,EMC的云安全产品...物联网与云计算是什么关系?怎样选择基于SaaS的IT服务管理...CIO对公共云的顾虑是什么?for(inti=0;i<dataGridView1.Rows.Count;i++)……你的事件应该是写在Validated或Valid……

我是想在第四列输入数据时进行判断
解决方案九:
引用5楼xiaolinyouni的回复:

引用楼主abcwlm的回复:云下载与传统下载的区别和优势...与英特尔合作,EMC的云安全产品...物联网与云计算是什么关系?怎样选择基于SaaS的IT服务管理...CIO对公共云的顾虑是什么?for(inti=0;i<dataGridView1.Rows.Count;i++)……你的事件应该是写在Validated或Valid……

第四列的数据时通过键盘输入的,然后与第三列比较,我是这样写的,但发现第4列还是不能实例化privatevoiddataGridView1_CellValidating(objectsender,DataGridViewCellValidatingEventArgse){boolflag=false;if(e.ColumnIndex==4){try{if(!String.IsNullOrEmpty(e.FormattedValue.ToString())){flag=true;decimalval=decimal.Parse(e.FormattedValue.ToString());}}catch(Exceptionex){flag=false;dataGridView1.Rows[e.RowIndex].ErrorText="必须输入数字";MessageBox.Show("必须输入数字");e.Cancel=true;}if(flag&&e.FormattedValue.ToString().Trim()!=null){for(inti=0;i<dataGridView1.Rows.Count;i++){decimald1=Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value.ToString());decimald2=Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value.ToString());if(d1>d2){dataGridView1.Rows[i].ErrorText="实际入库量不能大于订购量";MessageBox.Show("实际入库量不能大于订购量");e.Cancel=true;}}}}}privatevoidbtncheck_Click(objectsender,EventArgse){groushowen.Location=newSystem.Drawing.Point(groushowen.Location.X,groushowen.Location.Y);groushowen.Visible=true;strings=null;for(inti=0;i<dataGridView1.Rows.Count;i++){s=dataGridView1.Rows[i].Cells[4].Value.ToString();}this.enterListTableAdapter.Fill(this.wgycDataSet3.EnterList,s);}
解决方案十:
你是在编辑时比较还是读取数据时比较?
解决方案十一:
第4列的数据是用键盘输入的,然后与第3列数据进行比较,下面是我自己写的,但发现还是会出现第四列对象没有初始化的问题,请问我该怎么改,或者有别的方法能实现吗?谢谢!!privatevoiddataGridView1_CellValidating(objectsender,DataGridViewCellValidatingEventArgse){boolflag=false;if(e.ColumnIndex==4){try{if(!String.IsNullOrEmpty(e.FormattedValue.ToString())){flag=true;decimalval=decimal.Parse(e.FormattedValue.ToString());}}catch(Exceptionex){flag=false;dataGridView1.Rows[e.RowIndex].ErrorText="必须输入数字";MessageBox.Show("必须输入数字");e.Cancel=true;}if(flag&&e.FormattedValue.ToString().Trim()!=null){for(inti=0;i<dataGridView1.Rows.Count;i++){decimald1=Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value.ToString());decimald2=Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value.ToString());if(d1>d2){dataGridView1.Rows[i].ErrorText="实际入库量不能大于订购量";MessageBox.Show("实际入库量不能大于订购量");e.Cancel=true;}}}}}privatevoidbtncheck_Click(objectsender,EventArgse){groushowen.Location=newSystem.Drawing.Point(groushowen.Location.X,groushowen.Location.Y);groushowen.Visible=true;strings=null;for(inti=0;i<dataGridView1.Rows.Count;i++){s=dataGridView1.Rows[i].Cells[4].Value.ToString();}this.enterListTableAdapter.Fill(this.wgycDataSet3.EnterList,s);}
解决方案十二:
第4列的数据是用键盘输入的,然后与第3列数据进行比较,下面是我自己写的,但发现还是会出现第四列对象没有初始化的问题,请问我该怎么改,或者有别的方法能实现吗?谢谢!!privatevoiddataGridView1_CellValidating(objectsender,DataGridViewCellValidatingEventArgse){boolflag=false;if(e.ColumnIndex==4){try{if(!String.IsNullOrEmpty(e.FormattedValue.ToString())){flag=true;decimalval=decimal.Parse(e.FormattedValue.ToString());}}catch(Exceptionex){flag=false;dataGridView1.Rows[e.RowIndex].ErrorText="必须输入数字";MessageBox.Show("必须输入数字");e.Cancel=true;}if(flag&&e.FormattedValue.ToString().Trim()!=null){for(inti=0;i<dataGridView1.Rows.Count;i++){decimald1=Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value.ToString());decimald2=Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value.ToString());if(d1>d2){dataGridView1.Rows[i].ErrorText="实际入库量不能大于订购量";MessageBox.Show("实际入库量不能大于订购量");e.Cancel=true;}}}}}privatevoidbtncheck_Click(objectsender,EventArgse){groushowen.Location=newSystem.Drawing.Point(groushowen.Location.X,groushowen.Location.Y);groushowen.Visible=true;strings=null;for(inti=0;i<dataGridView1.Rows.Count;i++){s=dataGridView1.Rows[i].Cells[4].Value.ToString();}this.enterListTableAdapter.Fill(this.wgycDataSet3.EnterList,s);}
解决方案十三:
第4列的数据是用键盘输入的,然后与第3列数据进行比较,下面是我自己写的,但发现还是会出现第四列对象没有初始化的问题,请问我该怎么改,或者有别的方法能实现吗?谢谢!!privatevoiddataGridView1_CellValidating(objectsender,DataGridViewCellValidatingEventArgse){boolflag=false;if(e.ColumnIndex==4){try{if(!String.IsNullOrEmpty(e.FormattedValue.ToString())){flag=true;decimalval=decimal.Parse(e.FormattedValue.ToString());}}catch(Exceptionex){flag=false;dataGridView1.Rows[e.RowIndex].ErrorText="必须输入数字";MessageBox.Show("必须输入数字");e.Cancel=true;}if(flag&&e.FormattedValue.ToString().Trim()!=null){for(inti=0;i<dataGridView1.Rows.Count;i++){decimald1=Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value.ToString());decimald2=Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value.ToString());if(d1>d2){dataGridView1.Rows[i].ErrorText="实际入库量不能大于订购量";MessageBox.Show("实际入库量不能大于订购量");e.Cancel=true;}}}}}privatevoidbtncheck_Click(objectsender,EventArgse){groushowen.Location=newSystem.Drawing.Point(groushowen.Location.X,groushowen.Location.Y);groushowen.Visible=true;strings=null;for(inti=0;i<dataGridView1.Rows.Count;i++){s=dataGridView1.Rows[i].Cells[4].Value.ToString();}this.enterListTableAdapter.Fill(this.wgycDataSet3.EnterList,s);}

时间: 2024-09-30 03:46:11

dataGridView中两列的值比较大小的相关文章

c#4.0-关于datagridview中checked选中获取值的问题

问题描述 关于datagridview中checked选中获取值的问题 public void getInfoCourse() { int count = 0; for (int i = 0; i < dgv_Course.RowCount; i++) { if (dgv_Course.Rows[i].Cells[0].EditedFormattedValue.ToString() == "True") { string c_id = dgv_Course.Rows[i].Cel

怎么设置datagridview中某列的单元格为下拉形式 ?

问题描述 怎么设置datagridview中某列的单元格为下拉形式?下列的时候要显示一个三列的网格.当在datagridview中单元格输入条件时,下拉网格中的值也随之变化. 解决方案 解决方案二:该列使用DataGridViewComboboxColumn解决方案三:引用1楼fangxinggood的回复: 该列使用DataGridViewComboboxColumn 这个好像不行吧..1.用combobox好像只能显示一列..(我要显示多列)2.用Combobox在我输入值时不能查找comb

Excel找出两列相同值的VBA宏代码

以下的宏代码,其功能是,找到AB两列相同值,并存放到C列. Sub MySubSearch() Dim i As Integer Dim c As Range For i = 2 To Sheet1.[B65536].End(xlUp).Row For Each c In Sheet1.Range("A2:A" & Sheet1.[A65536].End(xlUp).Row) If Cells(i, 2).Value = c Then Cells(i, 2).Font.Colo

怎么获得当前行(gridcontrol中)在数据库中某列的值?

该方法需要有GridView ds.Tables[0].Rows[gridView1.FocusedRowHandle]["数据库中某列的名字"].ToString(); 或者(该方法不需要有GridView) DataSet ds=new DataSet();  System.Windows.Forms.BindingManagerBase dsMgr;  dsMgr = this.BindingContext[ds.Tables[0]];  string ds中某列的值 = ds.

VB.net MSchart画图绑定数据库中两列数据。

问题描述 VB.net MSchart画图绑定数据库中两列数据. 请问用MSchart画图时,怎么绑定数据库中两列数据,我用的数据库是access,希望大家帮忙帮忙. 解决方案 无论你用什么数据库,总能取到一个 DataTable吧. chart1.DataBindCrossTable(dt.DefaultView, "分组字段名", "x坐标字段名", "y坐标字段名", "", PointSortOrder.Ascendi

Mysql中 unique列插入重复值该怎么解决呢_Mysql

当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT.中断操作或者更新旧记录为新值. mysql> create table menus(id tinyint(4) not null auto_increment, -> label varchar(10) null,url varchar(20) null,unique key(id)); Query

MDI 窗口在打开一个子窗口同时关闭已经打开的子窗口时,子窗口上 datagridview 中的列标题刷新的问题

问题描述 在MDI窗口中打开一个带有datagridview控件的子窗口,同时关闭另一个已经打开的带有datagridview控件的子窗口时出现datagridview中的列标题中含有已关闭子窗口中datagridview的列标题,如下图.使用的VS版本为VS2010旗舰中文版,datagridview在窗口load事件中绑定数据源.打开一个子窗口,同时关闭已打开子窗口的代码如下privateconsumerf_consumer;privatevoidConsumerToolStripMenuI

如何用C# 来比较EXCEL表中两列数据的差异?

问题描述 EXCEL有A,B两列数据:A列B列1112233344如何用C#找出A列在B列中没有的数据,并显示在另一个EXCEL中,谢谢. 解决方案 解决方案二:首先你必须把excel里的数据读出来然后管你是放到一个DataTable里还是2个List<string>里,最后也不过是循环比较一下,然后再把比较结果放到一个新的DataTable或List里,然后导出excel就行了至于如何导入导出Excel解决方案三:引用1楼Z65443344的回复: 首先你必须把excel里的数据读出来然后管

如何获取datagridview手动添加列的值?

问题描述 问题:我在datagridview上面手动添加了一列checkbox,如何写代码获取checkbox是否被选中了?this.dgvRights.Rows[0].Cells[3].Value.ToString();这样写就报错了!!!bindRights();//获取数据库内容绑定到datagridviewDataGridViewColumnmyCol=newDataGridViewCheckBoxColumn();myCol.HeaderText="选择列";dgvRight