C#程序,调试不出错,运行时出现——System.NullReferenceException: 未将对象引用设置到对象的实例。
程序代码段太长了,贴一个地址。出问题的语句是那句foreach(DataGridViewRowrowindataGridView1.Rows){//出错的位置调试不会出错...
程序代码段太长了,贴一个地址。出问题的语句是那句 foreach (DataGridViewRow row in dataGridView1.Rows)
{//出错的位置
调试不会出错,但是运行时就会出现异常——
************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
在 BookManagementSystem.InformationManageForm.dataGridView1_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e) 位置 D:\project\BookManagementSystem\BookManagementSystem\InformationManageForm.cs:行号 120
程序代码在我的百度空间里第一个叫做提问的日志里,写地址要抽,不好意思。 展开
{//出错的位置
调试不会出错,但是运行时就会出现异常——
************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
在 BookManagementSystem.InformationManageForm.dataGridView1_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e) 位置 D:\project\BookManagementSystem\BookManagementSystem\InformationManageForm.cs:行号 120
程序代码在我的百度空间里第一个叫做提问的日志里,写地址要抽,不好意思。 展开
5个回答
展开全部
我建议你在里面写个try catch,捕捉到异常后输出几个关键变量的内容。主要包括 row是否为空、row的实际类型、要修改的两个button获得的单元格是否为空。
如果你实在很郁闷的话,可以把你的项目、数据库以及错误信息打包发给我 iFish@fishlee.net,我可以抽空给你看看。
如果你实在很郁闷的话,可以把你的项目、数据库以及错误信息打包发给我 iFish@fishlee.net,我可以抽空给你看看。
追问
感谢你啊,用了你说的try和Catch后发现Datagridview有一行完全是空的,看来它是罪魁啊。但我设置的所有字段都是不允许为空的,这一行在SQL Server中也能找到,在表的最后一行,带星号,应该是在添加完一个条目之后SQL Server自动产生的新行,可以想办法把它不显示出来吗?
追答
查询的时候排除掉。另外就是sql server不存在什么自动产生的新行的问题。所以还是查查程序上的问题吧。
展开全部
到你空间看了
row.Cells["cSellcase"].Value如果是null的话,tostring会报错的
可以写成这样
testsell = row.Cells["cSellcase"].Value+"";
int teststore = Int32.Parse(row.Cells["cStore"].Value.ToString());
这句话也有隐患。
row.Cells["cSellcase"].Value如果是null的话,tostring会报错的
可以写成这样
testsell = row.Cells["cSellcase"].Value+"";
int teststore = Int32.Parse(row.Cells["cStore"].Value.ToString());
这句话也有隐患。
更多追问追答
追问
调试时并不为空啊?但运行就出错。
追答
能调试到那一步,说明有的行数据是有的,有的是null ,因为你用的是for循环
CellFormatting不需要逐行遍历,这个事件本来就是逐行处理的吧
e.ColumnIndex可以获取到那一行的索引,所以说
foreach (DataGridViewRow row in dataGridView1.Rows)有点多余
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
到底是foreach出错还是大括号后的第一个语句出错?
把foreach换成for(int i=0;i< datagridview.rows.count;i++),然后相应的后面读取单元格的代码改成datagridview.rows[i].cells[""]
这样试试
把foreach换成for(int i=0;i< datagridview.rows.count;i++),然后相应的后面读取单元格的代码改成datagridview.rows[i].cells[""]
这样试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
dataGridView1 没有数据源。。是个空
追问
但是为啥换成——
var result1 = from b in db.Bookimformation where b.书名.Contains(bookname) && b.作者.Contains(bookauthor) orderby b.作者 select new { b.书号, b.书名, b.作者, b.出版社, b.出版日期, b.价格, b.分类, b.库存量, b.是否为畅销书 };
就不为空了?而写成select b就是空表?
追答
刚到你空间看了,是个linq to sql 的东西 不是特别了解,而且还是个winform的。
从网上找了段代码 希望对你有帮助
if (e.ColumnIndex == dataGridView1.Columns["列名"].Index && e.Value != null)
{
//处理符合if条件的单元格的显示样式
e.CellStyle.SelectionForeColor = Color.Red; e.CellStyle.ForeColor = Color.Red; e.CellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我出这问题一般都是因为变量木有初始化~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询