【问题标题】:How to implement multiple cell selection using RepositoryItemCheckEdit in Devexpress XtraGrid?如何在 Devexpress XtraGrid 中使用 RepositoryItemCheckEdit 实现多个单元格选择?
【发布时间】:2017-02-20 20:43:46
【问题描述】:

Devexpress 网格视图存储库 checkedit 在我选择下一个单元格的 checkedit 后立即自动取消选择。

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

这是我的网格视图:

这是底层数据库表:

提醒表格并上传新的屏幕截图

如何实现PassedResultsPending列的多个单元格选择?

【问题讨论】:

标签: c# vb.net devexpress xtragrid devexpress-windows-ui


【解决方案1】:

因此,您有 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 unbound'

希望这会有所帮助。

【讨论】:

  • 如果我也添加了这个查询,仍然没有运气。 Dim str1 As String = String.Format("SELECT id, Name, Passed, ResultPending FROM mydb.mytable ORDER BY Name ")
  • @newcommer,您在数据库中有这些列吗?最初,在您的数据库屏幕截图中,它们不存在。因此,您需要使用 Unbound Columns 概念。现在,如果您将这些列添加到 DB,您应该通过在网格 HTML 标记中正确指定 DB 字段名称来像使用普通的 DB 绑定列一样使用它们。
  • 您现在可以检查一下吗?
  • @newcommer 还请添加您的网格列标记,您做对了吗?在这种情况下,您需要在每次单击复选框时更新您的数据库表,因为在 loadv() 中您调用 GridControl1.RefreshDataSource() 并且您检查的状态更改会丢失。
  • 为了保存,我将在 GridView1.CellValueChanged 事件中使用 arrayOfGridChanges.Add(String.Concat(e.Column.FieldName.ToString(), "|", Convert.ToString(e.RowHandle))) .
【解决方案2】:
  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
    

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 2012-09-13
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多