-1

我有一堂课:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OrderManagementv1
{
    public class info
    {
        public string startPickTicket { get; set;}
        public string endPickTicket { get; set;}
        public string ordFile { get; set;}
        public int ordStartPage { get; set;}
        public int ordEndPage { get; set;}
        public string bolFile { get; set;}
        public int bolStartPage { get; set;}
        public int bolEndPage { get; set;}
        public string pickFile { get; set;}
        public int pickEndPage { get; set;}
        public string invFile { get; set;}
        public int invEndPage { get; set;}
        public info()
        {

        }

    }
}

之后我执行以下操作:

info i = new info();
i.startPickTicket = dataGridView2.CurrentRow.Cells[dataGridView2.SelectedCells[0].ColumnIndex].Value.ToString();

我收到以下错误:

你调用的对象是空的。

几个小时以来,我一直试图弄清楚这一点。也许它真的很简单。我不明白。请帮忙谢谢

4

3 回答 3

4

调试提示:将大语句拆分为多个小语句:

var row = dataGridView2.CurrentRow;
var cells = row.cells;
var cell = dataGridView2.SelectedCells[0];
var selectedIndex = cell.ColumnIndex;
var selectedCell = cells[selectedIndex];
var selectedValue = selectedCell.Value;
i.startPickTicket = selectedValue.ToString();

发生错误的行将揭示问题的原因。

于 2013-08-14T15:21:45.067 回答
1

此错误意味着某些内容设置为null。在您的代码中,它可以是以下任何一种:

dataGridView2
dataGridView2.CurrentRow
dataGridView2.CurrentRow.Cells[dataGridView2.SelectedCells[0].ColumnIndex]
dataGridView2.CurrentRow.Cells[dataGridView2.SelectedCells[0].ColumnIndex].Value
dataGridView2.SelectedCells[0]

如果你稍微重构一下你的代码,它会更容易找到这个错误,因为它会发生在一个较少发生的行上。

您还可以更具防御性地编码并添加引发信息异常的检查,以便在运行时获得更多有用的异常。使用Convert.ToString而不是.ToString()将使代码容忍单元格Value为空。

if (dataGridView2 == null)
    throw new InvalidOperationException("The grid is null");

if (dataGridView2.SelectedCells.Length == 0)
    throw new InvalidOperationException("No cells are selected in the grid");

if (dataGridView2.CurrentRow == null)
    throw new InvalidOperationException("The grid has no current row");

var cell = dataGridView2.SelectedCells[0]
var currentRowCell = dataGridView2.CurrentRow.Cells[cell.ColumnIndex];

info i = new info();
i.startPickTicket = Convert.ToString(currentRowCell.Value);
于 2013-08-14T15:21:14.910 回答
1

您的问题来自您尝试获取的数据,而不是您的实体。

你应该看看 dataGridView2.CurrentRow 这肯定是'null'。或者该单元格不存在。

于 2013-08-14T15:23:34.953 回答