簡體   English   中英

如何查找DevExpress XtraGrid中選中的復選框?

[英]How to find which check boxes are checked within DevExpress XtraGrid?

我正在開發桌面應用程序(VB.NET)。 我與開發快速的Xtra網格的形式。 在網格內,我具有第一列作為未綁定復選框(存儲庫項目)。 現在,我已經完成了該功能,以便用戶可以選中/取消選中復選框以選擇行。

我想要實現的是:

  1. 我在表格上有一個按鈕。 如果未選中任何復選框,則應禁用該按鈕,否則應將其啟用。 默認情況下,在加載表單時,所有復選框均處於選中狀態,因此按鈕處於啟用狀態。 用戶可以取消選中所有復選框。 因此,如何查找是否選中了任何一個復選框以使按鈕啟用/禁用。

  2. 在按鈕單擊事件上,我想獲取所有已選中復選框的行的ID(這是復選框旁邊的網格內的列)。

我確實有一個想法,我必須首先對網格內的所有行進行for循環,然后對復選框進行for循環以查找是否選中了復選框。 但是不要把它放在一起。

請幫助我解決此問題。

謝謝

不確定“ Dev Express Xtra網格”。 如果你使用數據網格

首先聲明並初始化一個變量,說,標志-false,為false

現在,您可以使用for循環,該循環繼續循環直到網格中的行數

在循環內,您檢查是否已選中“當前列”復選框

如果選中,則將標志設置為true並退出循環, 否則繼續循環

循環后,檢查當前標志值,如果flag = false,則禁用按鈕,否則啟用按鈕。

對於第二個問題,請執行相同的循環,然后

內部循環檢查是否檢查當前行,如果為true,則獲取id列的值,否則繼續。

我認為這種邏輯可能會對您有所幫助。 :)

如果您使用的是XtraGrid GridControl,則需要更多地使用GridView,它是GridControl中包含的編輯器。

通常,您會將數據綁定到GridControl的DataSource屬性,但是要用於用戶體驗的大多數其他事件和屬性都將與GridView本身相關。

通過GridView獲得的一些FocusedRowHandle方法和屬性包括FocusedRowHandleFocusedColumnGetFocusedRow()等。

因此,當您為該按鈕注冊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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM