2017-02-20 33 views
0

Devexpress網格視圖存儲庫checkedit自動取消選擇下一個單元的checkedit後立即取消選擇。如何使用Devexpress XtraGrid中的RepositoryItemCheckEdit實現多個單元格選擇?

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 load view

這裏是底層數據庫表:

驚動表,並上傳了新的截圖 MyDatabase

如何實現多個小區選擇PassedResultsPending列?

+0

您可以添加一個屏幕截圖與檢查編輯標記和未選中的複選框? – andrews

+0

我已經在vb中創建了示例。net並上傳到谷歌驅動器上.https://drive.google.com/file/d/0B_JyyZZteh3eNnNRVUJ1TmRoSWs/view?usp = sharing – newcommer

+0

在上面共享的.zip文件中添加了兩個截圖,名爲capture1和capture2 – newcommer

回答

0

所以,你有2列與複選框PassedResultPending但你只IDName從數據庫中加載。因此,您的2個複選框列不綁定到數據。他們被稱爲無約束列

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

因此,在設置複選框時,您還需要在代碼隱藏的某個位置(某種List)中記錄它的狀態,然後當表單被重新繪製時,您需要將檢查的狀態數據提供回網格。

爲了實現這一探索:

  1. GridControl.CustomUnboundColumnData Event - 注意它同時支持讀取和寫入的情況。
  2. Unbound Boolean column with the CheckEdit
  3. Behavour of CheckEdit with MultiSelect mode turned on
  4. 使用關鍵詞的更多搜索結果DX support forum: 'checkedit綁定'

希望這有助於。

+0

如果我也添加了這個查詢,還是沒有運氣。 Dim str1 As String = String.Format(「SELECT \t'id','Name','Passed','ResultPending' from'mydb'.'mytable' ORDER BY Name」) – newcommer

+0

@newcommer,你有那些列D B?最初,在你的數據庫截圖中,他們不存在。因此,您需要使用Unbound Columns概念。現在,如果將這些列添加到數據庫中,則應該像使用正常的數據庫綁定列一樣,通過在網格HTML標記中正確指定數據庫字段名稱來處理它們。 – andrews

+0

你可以請現在檢查嗎? – newcommer

0
  1. 從工具箱創建綁定源。
  2. 創建新的非類型化數據集(命名爲使用工具箱的dsOnDesign)並在數據集中創建表。然後在表格中創建列。
  3. 將數據集分配爲數據源,並將表作爲數據成員綁定到源。
  4. 然後通過使用屬性爲網格控件分配綁定源。 現在,我需要將數據集表格的列綁定到網格視圖的列。 你可以通過打開「網格設計器」來完成。 點擊列(主視圖) - >選擇列併爲每個列指定字段名稱。 您可以在「列」組中查看「列表」和「網格」視圖的列中的表格列。 這裏是我的代碼:

    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 
    
相關問題