[英]How to find which check boxes are checked within DevExpress XtraGrid?
我正在開發桌面應用程序(VB.NET)。 我與開發快速的Xtra網格的形式。 在網格內,我具有第一列作為未綁定復選框(存儲庫項目)。 現在,我已經完成了該功能,以便用戶可以選中/取消選中復選框以選擇行。
我想要實現的是:
我在表格上有一個按鈕。 如果未選中任何復選框,則應禁用該按鈕,否則應將其啟用。 默認情況下,在加載表單時,所有復選框均處於選中狀態,因此按鈕處於啟用狀態。 用戶可以取消選中所有復選框。 因此,如何查找是否選中了任何一個復選框以使按鈕啟用/禁用。
在按鈕單擊事件上,我想獲取所有已選中復選框的行的ID(這是復選框旁邊的網格內的列)。
我確實有一個想法,我必須首先對網格內的所有行進行for循環,然后對復選框進行for循環以查找是否選中了復選框。 但是不要把它放在一起。
請幫助我解決此問題。
謝謝
不確定“ Dev Express Xtra網格”。 如果你使用數據網格
首先聲明並初始化一個變量,說,標志-false,為false
現在,您可以使用for循環,該循環繼續循環直到網格中的行數
在循環內,您檢查是否已選中“當前列”復選框
如果選中,則將標志設置為true並退出循環, 否則繼續循環
循環后,檢查當前標志值,如果flag = false,則禁用按鈕,否則啟用按鈕。
對於第二個問題,請執行相同的循環,然后
內部循環檢查是否檢查當前行,如果為true,則獲取id列的值,否則繼續。
我認為這種邏輯可能會對您有所幫助。 :)
如果您使用的是XtraGrid GridControl,則需要更多地使用GridView,它是GridControl中包含的編輯器。
通常,您會將數據綁定到GridControl的DataSource屬性,但是要用於用戶體驗的大多數其他事件和屬性都將與GridView本身相關。
通過GridView獲得的一些FocusedRowHandle
方法和屬性包括FocusedRowHandle
, FocusedColumn
, GetFocusedRow()
等。
因此,當您為該按鈕注冊click事件時,在該方法內部,存儲對gridview的引用,即
private void SomeButtonClick(object sender, EventArgs e)
{
var gridView = this.whateverYourGridViewIsNamedGridView;
//Now, you can access the methods and properties of the gridView...
//Say you want to obtain the focused row's handle
var rowHandle = gridView.FocusedRowHandle;
//Or, in your case, if you want to iterate through the rows or columns...
for(GridColumn column in gridView.Columns)
{
if(condition)
{
//Do something
}
}
}
根據您的方案,我建議您再次打開設計器。 在左下方,單擊就地編輯器存儲庫。 您應該在這里看到您的CheckEdit
。 如果選擇CheckEdit
,則應該可以單擊小閃電並訪問編輯器的事件。 您想向CheckStateChanged
事件或CheckedChanged
事件注冊,這將在任何編輯者的檢查狀態更改時觸發。
從這里,我想一個bool添加到您的域對象或視圖模型來裝飾,上面有布爾為domainObject的isChecked
。 這樣,當檢查事件觸發時,您可以處理該布爾值的設置,例如:
private void CheckEventFiring(object sender, EventArgs e)
{
//Get the currently focused row and cast it to your object
//This will expose all the properties, including the aforementioned boolean value
var currentRow = gridView.GetFocusedRow() as YourDomainObject;
//Based on checked state...
currentRow.IsChecked = //Checked or Unchecked
}
現在,您已經進行了設置,當您單擊按鈕時,您可以通過執行以下操作從網格控件的數據源中獲取所有“已檢查”的項目:
var dataSource = gridControl.DataSource as List<YourDomainObject>().Where(x => x.IsChecked);
現在,您僅具有檢查項目的行中的數據。 如果未選中檢查狀態,則對象上的布爾值應該為false,而選中時則為true。
讓我知道這是否有意義。 Dev Express的學習曲線很小,但是一旦掌握,就非常容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.