考虑这个非常简单的测试项目:为什么DataGridViewRow.Cells [1] .Value在它不为空时返回null?
DataGridView1有2列,两者都是在设计时通过右键/编辑列进行设置。
在构造函数DataGridView1填充了11条记录
当运行应用程序的共有11条记录中DataGridView1
表示,现在的问题。
当你点击该按钮,方法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");
}
}
@GuidoG当我意识到自己错了!你有没有尝试跳过第一行? –
@stuartd如何检查我的循环是否为标题行? – GuidoG
@stuartd看起来像你在哪里毕竟,看到下面的答案 – GuidoG