考慮這個非常簡單的測試項目:爲什麼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