考虑这个非常简单的测试项目:
DataGridView1 有 2 列,均在设计时通过鼠标右键/编辑列进行设置。
在构造函数 DataGridView1 中填充了 11 条记录
运行应用程序时,DataGridView1 中显示 11 条记录
现在解决问题。
当您单击该按钮时,将调用方法 CreateResultDataTable() 并在
row.Cells[1].Value.ToString()
该值似乎为空,但我知道它不是。
现在对于奇怪的部分,当调试时,我将鼠标移到行上,我看到它有 2 个单元格。因此,我将鼠标移到它上面并打开单元格枚举,然后打开第二个单元格,实际上该值为空。
所以现在我将鼠标移到 dataGridView1.Rows 上,然后将鼠标移到 11 行中的第一行上,然后再次移到单元格上并打开枚举,当我进入第二个单元格时,该值不为 NULL!
它们不是同一个对象吗?
怎么会这样呢?以及如何解决这个问题?
我尝试使用列名而不是索引,但结果保持不变,我仍然收到 nulreference 异常。
以下是该程序的完整代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
LoadMapping();
}
private void button1_Click(object sender, EventArgs e)
{
dataGridView2.DataSource = CreateResultDataTable();
}
private DataTable CreateResultDataTable()
{
DataTable Result = new DataTable();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
Result.Columns.Add(row.Cells[1].Value.ToString()); // why is Value null here ??
}
return Result;
}
private void LoadMapping()
{
dataGridView1.Rows.Add("Message//Header//Message_Type", "MessageType");
dataGridView1.Rows.Add("Message//Header//Creation_Date", "MessageDate");
dataGridView1.Rows.Add("Message//Header//Sequence_Number", "MessageSequenceNumber");
dataGridView1.Rows.Add("Message//Header//Sender", "MessageSender");
dataGridView1.Rows.Add("Message//Header//Receiver", "MessageReceiver");
dataGridView1.Rows.Add("Message//Detail//Visit//Transport_Reference_Out", "LotNumber");
dataGridView1.Rows.Add("Message//Detail//Visit//Licenseplate", "TruckPlate");
dataGridView1.Rows.Add("Message//Detail//Visit//Cargo//VIN", "ChassisNumber");
dataGridView1.Rows.Add("Message//Detail//Visit//Cargo//Make", "BrandName");
dataGridView1.Rows.Add("Message//Detail//Visit//Cargo//LoadDate", "LaadDatum");
}
}
最佳答案
您需要添加此代码来处理标题行。在使用 Tostring() 之前,您必须检查单元格是否有值(即不为空);如果单元格为空,则 ToString()
将抛出异常。
private DataTable CreateResultDataTable()
{
DataTable Result = new DataTable();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
var cell = row.Cells[1].Value;
if (cell != null) {
Result.Columns.Add(cell.ToString()); // Why is Value null here??
}
}
return Result;
}
关于c# - 为什么 DataGridViewRow.Cells[1].Value 返回 null 而不是 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41144567/