我有一個DataTable
作爲DataSource
一個DataGridView
,在DataGridView
一個Label
顯示當前選擇的細胞處理和最後有該按鈕開口的MessageBox
以顯示一個Button
當前選擇的單元地址相同。DataGridView的與數據源報告兩個不同CurrentCellAddress行值
標籤的文字在DataGridViews
CellClick
事件中更新。
以下圖爲例:選擇最後一個「NewRow」時,標籤將正確更新爲正確的第五行(5)索引。但是,當我點擊按鈕並顯示相同的選定單元格地址時,行索引爲四(4)。
我猜這與DataSource/DataTable
有關,因爲如果DataGridView
未綁定到數據源,則不會發生這種情況。
我有一種解決方法,但我不理解爲什麼dataGridView1.CurrentCellAddress
似乎返回不正確/不同的值相同的方法。在單元格單擊事件中調用方法CurrentCellAddress
時發生了什麼,並且稍後單擊該按鈕時會調用相同的方法?選擇沒有改變,但看起來它們是不同的數字。謝謝你的幫助。
代碼我用來測試這個...
DataTable gridData;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
//FillGrid();
gridData = GetTable();
FillDT(gridData);
dataGridView1.DataSource = gridData;
label1.Text = "CurrentCellAddress: " + dataGridView1.CurrentCellAddress.ToString();
}
private DataTable GetTable() {
DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(String));
dt.Columns.Add("Col2", typeof(String));
dt.Columns.Add("Col3", typeof(String));
return dt;
}
private void FillDT(DataTable dt) {
for (int i = 0; i < 5; i++) {
dt.Rows.Add("R" + i + "C1", "R" + i + "C2", "R" + i + "C3");
}
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
label1.Text = "CurrentCellAddress: " + dataGridView1.CurrentCellAddress.ToString();
}
private void btnGetCellAddress_Click(object sender, EventArgs e) {
MessageBox.Show("CurrentCellAddress: " + dataGridView1.CurrentCellAddress.ToString(),"Cell Address");
}
// Method to fill the grid to show the values are correct
// when the datagridview is not data bound
private void FillGrid() {
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
for (int i = 0; i < 5; i++) {
dataGridView1.Rows.Add("R" + i + "C1", "R" + i + "C2", "R" + i + "C3");
}
}
你是對的。答案中的鏈接也解釋了爲什麼在沒有數據源的情況下值正確返回。在你鏈接到的'OnRowValidated'引用的大if語句中的第一個條件是if(this.DataSource!= null &&'... ..這看起來可以解釋發生了什麼。謝謝你提供深入的解釋。 – JohnG