2017-02-20 291 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 
    
相关问题