簡體   English   中英

如何在Devexpress XtraGrid中使用RepositoryItemCheckEdit實現多個單元格選擇?

[英]How to implement multiple cell selection using RepositoryItemCheckEdit in Devexpress XtraGrid?

在選擇下一個單元格的選中狀態后,Devexpress網格視圖存儲庫的選中狀態會立即自動取消選擇。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ConnectDatabase()
    loadv()
End Sub

Private Overloads Sub loadv()
    Dim DataAdapter5 As New MySqlDataAdapter
    Dim DataSet1 As New DataSet
    DataSet1.Clear()

    Dim str1 As String = String.Format("SELECT `id`, `Name` FROM `mydb`.`mytable`  ORDER BY Name ")
    DataAdapter5 = New MySqlDataAdapter(str1, conn)
    DataAdapter5.Fill(DataSet1)

  '  GridControl1.RefreshDataSource()

 '   GridControl1.Refresh()

    GridControl1.DataSource = DataSet1
    With GridControl1
        .DataSource = DataSet1.Tables(0)
    End With
    GridView1.BestFitColumns()
End Sub

這是我的網格視圖:

Form1加載視圖

這是基礎數據庫表:

警報表並上傳新的屏幕截圖 MyDatabase的

如何對PassedResultsPending列實施多個單元格選擇?

因此,您有兩列帶有PassedResultPending復選框,但僅從數據庫中加載IDName 因此,您的2個復選框列未綁定到數據。 它們稱為未綁定列

您必須自己維護未綁定列的狀態。

因此,在設置復選框后,您還需要在代碼隱藏的某處(某種形式的List )中記錄它的狀態,然后在重新繪制表單時,需要將選中的狀態數據提供回網格。

要實現這一探索:

  1. GridControl.CustomUnboundColumnData事件 -請注意,它支持讀寫案例。
  2. CheckEdit的未綁定布爾值列
  3. 啟用MultiSelect模式的CheckEdit的行為
  4. 在DX 支持論壇中搜索使用關鍵字的更多結果:“ checkedit unbound”

希望這可以幫助。

  1. 從工具箱創建綁定源。
  2. 創建了新的無類型數據集(使用工具箱命名為dsOnDesign),並在數據集中創建了表。 然后在表中創建列。
  3. 將數據集分配為數據源,將表分配為綁定源的數據成員。
  4. 然后使用屬性將綁定源分配給網格控件。 現在,我需要將數據集表的列綁定到網格視圖的列。 您可以通過打開“網格設計器”來實現。 單擊列(主視圖)->選擇列,然后為每個列分配字段名。 您可以在“文件列表”中查看表列,在“列”組中查看Gird視圖的列。 這是我的代碼:

      Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ConnectDatabase() loadView() End Sub Private Sub loadView() Dim enumerator As IEnumerator = Nothing dsOnDesign.Tables(0).Clear() Dim dataSetTemp As System.Data.DataSet dataSetTemp = New DataSet Dim da As New MySqlDataAdapter Dim str As String = "SELECT id, name, passed, resultPending FROM mydb.mytable" da = New MySqlDataAdapter(str, conn) da.Fill(dataSetTemp) Try enumerator = dataSetTemp.Tables(0).Rows.GetEnumerator() While enumerator.MoveNext() Dim current As DataRow = DirectCast(enumerator.Current, DataRow) Dim i As DataRow = Me.dsOnDesign.Tables(0).NewRow() i("ID") = Conversions.ToInteger(current(0)) i("Name") = current(1).ToString() i("Passed") = If(current(2) Is DBNull.Value, False, fbool(CBool(current(2)))) i("ResultPending") = If(current(3) Is DBNull.Value, False, fbool(CBool(current(3)))) dsOnDesign.Tables(0).Rows.Add(i) End While Finally If (TypeOf enumerator Is IDisposable) Then TryCast(enumerator, IDisposable).Dispose() End If End Try GridControl2.DataSource = dsOnDesign.Tables(0) End Sub Private Function fbool(ByVal bool As Boolean) As Boolean If bool = True Then Return True Else Return False End If End Function End Class 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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