2014-08-27 34 views
0

在我的表單中,我有一個帶有五個選項卡的tabpanel。 每個選項卡都有綁定到數據框的datagridview。 所有的數據網格都被正確填充,但事件CellContentClick僅適用於第一個選項卡。 我試圖以檢索所選單元格的內容與此代碼:在tabpanel中的c#datagridview

//fristtabpag and datagrid1 
private void dgw1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    text1.Text = dgw1.SelectedRows[0].Cells[0].Value.ToString(); 
} 
//second tabpag and datagrid1 
private void dgw2_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    text1.Text = dgw2.SelectedRows[0].Cells[0].Value.ToString(); 
} 
//other.... 

而且它只能在弗里斯特標籤頁。

我使用相同的代碼正確地爲其他頁面固定,但我得到一個錯誤的索引。 如何解決它?

+0

請分享您的代碼 – 2014-08-27 10:59:59

+0

修復了問題發佈。 – devilkkw 2014-08-27 11:06:38

+0

_I使用相同的代碼正確地爲其他page_固定。不,可能不是。確保你有5個不同的方法,每個__hooked__直到5個DGV的CellContentClick事件。還要注意,CellContentClick事件的名稱如下所示:只有當__content__不是當單元格的空白部分被點擊時纔會觸發。 – TaW 2014-08-27 11:07:44

回答

1

你可以嘗試使用DataGridViewCellEventArgs這樣的:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    {      
     DataGridView dgv = sender as DataGridView;         
     text1.Text = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.SafeToString(); 
    } 

或者你可以嘗試使用CurrentCellChanged事件,並從CurrentCell屬性的值:

private void dataGridView1_CurrentCellChanged(object sender, EventArgs e) 
    { 
     DataGridView dgv = sender as DataGridView; 
     if (dgv.CurrentCell != null) 
     { 
      text1.Text = ((DataGridView)sender).CurrentCell.Value.SafeToString(); 
     } 
    } 

(方法SafeToString()是一個簡單的擴展方法,它只是在調用ToString()之前檢查對象是否爲null,如果該對象爲null,則返回空字符串)

從您的代碼示例中,它看起來像您的事件處理程序對不同的DataGridView執行相同的操作。通過使用sender參數,可以對所有DataGridView使用相同的處理程序。

+0

很有用,非常感謝。工作正常 – devilkkw 2014-08-27 13:28:58