2009-10-13 41 views
0

我在C#.NET一點經驗,下面是我走到這一步:C#.NET的DataGridView使細胞點擊只有某些列

我創建了綁定到一個ObjectDataSource一個DataGridView(通用的清單,那是)。

儘管我可以很好地利用DataGridView的CellClick事件及其相應的委託接口(DataGridViewCellEventHandler)來很好地完成我的業務邏輯,但我仍然對總體邏輯不滿意。

基本上上述方法的缺點是對於某些特定的列,不需要綁定CellClick事件。他們只是簡單地顯示信息,而不是試圖將 收聽到一些CellClick事件。

我試過實現它一段時間。我試圖禁用這樣的列可以被點擊,但沒有運氣...

有沒有一個很好的方法來解決這個問題?

我真的不想檢查我的委託處理函數中的實際columnIndex是什麼,然後採取相應的行動。基本上,如果CellClick不會首先被觸發,那麼這將是一個很好的解決方案。

非常感謝提前!

回答

4

@伊,不完全是真的.....如果你真的不想做的過濾,我不認爲這是一個誠實的交易。您始終可以創建自己的自定義DataGridView並覆蓋OnCellClick事件。爲了讓它更簡單,您可以在設計時將您不希望引發活動的列設置爲ReadOnly,並在提高活動前檢查該狀況。

例子:

public class MyDataGridView : DataGridView 
{ 
    public MyDataGridView() 
    { 
    } 

    protected override void OnCellClick(DataGridViewCellEventArgs e) 
    { 
      if (!Columns[e.ColumnIndex].ReadOnly) 
      { 
       base.OnCellClick(e); 
      } 
    } 
} 
+0

非常感謝James! 這將以一種乾淨而有效的方式解決我的問題,愛它! –

0

我真的不想檢查我的委託處理函數中的實際columnIndex是什麼,然後採取相應的行動。

不幸的是,您沒有選擇,因爲DataGridView不會在其DataGridViewColumn對象上公開事件。爲什麼這種行爲對你有問題?

+0

這是正確的,我不能作出特別的DataGridViewColumn細胞不給CellClick事件迴應... 業務邏輯側重於某些列的特定細胞,我不覺得它是有效地檢查和過濾掉CellClicks從其他地方引起的那些「不相關的」CellClick事件。 說,我得到列A,B和C.我只關心列B和C,我想忽略從列A單元格觸發的CellClick事件。 我現在正在做的是在處理任何嚴重的事情之前,我檢查事件是否來自A列。如果是,我簡單地忽略它,我覺得這可能不是很好...... –