【发布时间】:2016-12-14 14:03:45
【问题描述】:
考虑这个非常简单的测试项目:
DataGridView1 有 2 列,这两列都是在设计时通过鼠标右键/编辑列设置的。
在 ctor DataGridView1 中填充了 11 条记录
运行应用程序时,11 条记录显示在 DataGridView1 中
现在解决问题。
当您单击按钮时,会调用 CreateResultDataTable() 方法并在
row.Cells[1].Value.ToString()
值似乎为空,而我知道它不是。
现在对于奇怪的部分,在调试时,我将鼠标移到行上,我看到它有 2 个单元格。所以我将鼠标移到它上面并打开单元格枚举,而不是打开第二个单元格,实际上该值为 null。
因此,现在我将鼠标移到 dataGridView1.Rows 上并将鼠标移到 11 行中的第一行上,然后再次移到单元格上并打开枚举,当我进入第二个单元格时,该值不为空!
它们不是同一个对象吗?
这怎么可能?以及如何解决这个问题?
我尝试使用列名而不是索引,但结果保持不变,我仍然得到 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");
}
}
【问题讨论】:
-
@GuidoG 我把评论删掉了,因为我意识到我错了!你试过跳过第一行吗?
-
@stuartd 我如何检查我的循环是否是标题行?
-
@stuartd 看来你到底在哪里,请看下面的答案
标签: c# winforms datagridview