先介紹環境:VS2010,dev11.2
想要達到的效果:,當單擊某一行時前面的選擇框選中。
在網上找了不少,但是感覺跟我想的做法很不一樣(有很多都是再另外添加一個什么CheckBox,這個我在Dev里是沒有找到)
下面介紹我的做法:
首先:GridControl控件要設置為不可編輯狀態,在“OptionsBehavior”下將“Editable”的值改為false,否則左鍵單擊不管用。
第一步:
進入“Run Designer”添加三列,主要講述一下第一列“判斷列”的屬性設置,這用了Dev的自帶屬性,在添加該列時將其屬性[ColumnEdit]從下拉框中選擇“CheckEdit”,然后打開該屬性的下來箭頭,設置其“ValueChecked”和“ValueUnChecked”的類型及值,這里我用了int類型的1和0來作為狀態的指示。【注:最好還是不要用默認的Bool型的true和false,這樣容易出現總是無法顯示打鈎選中的情況,但是用int型的就不會出現此情況;我找到問題所在了:因為我用了ToString函數,這時會自動把true或者false改變為大寫的“True”或“False”,因此判斷時就不正確,修改了這一點就可以正確大道目的】
另:我的做法主要就是這一步跟網上說的不太一樣,不是添加了一個CheckBox而是用Dev自己的已有的屬性。
第二步:
添加事件,選中GridControl的GridView,然后添加其事件“RowClick”,添加事件代碼如下:
private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) { string midValueStr = gridView1.GetDataRow(e.RowHandle)["select"].ToString(); if (midValueStr == "0" || midValueStr == "") { gridView1.GetDataRow(e.RowHandle)["select"] = 1; } else { gridView1.GetDataRow(e.RowHandle)["select"] = 0; } }
注:if條件中的空值判斷,我的這一列是在數據庫取出數據后新添加的,所以其值取出來是空的,而不是0.因此,該行未選中時可能有兩種值即0和空。
第三步:
運行,即可實現上述效果。而且在這種情況下,GridControl綁定的數據源中,我們所添加的判斷列的值也是實時改變的,這也方便后續取值使用。
小結:
①網上很多方法都添加了很多東西,最典型比如添加了CheckBox然后更改屬性,同時又用了不止一個事件,不知道是我沒看懂還是我沒有完全理解那些人的方式,反正我覺得太復雜了,而且有的控件或者屬性、事件我都找不到。不知道為什么不用dev本身的東西。
②再說一下我在試驗過程中測試的幾個相似的事件:FocusedRowChanged事件,它是在選中行的位置改變時發生(比如拖動選中行),而不是說你選中了另一行時發生;事件FocusedRowObjectChanged代表的才是在選中行改變時觸發,但是這個事件在控件最初載入時也會觸發,因此我感覺很不方便;CellValueChanged事件也可以實現上面的效果,此時整個控件是可編輯狀態,但是需要根據不同列的需求來設置具體列的可編輯狀態;最后就是RowClick事件了,也是我們上面使用的,它的效果就是只有你單擊了那一行才會觸發事件。