问题描述
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);}