在 DataSet 的隐藏 DataColumn 单元格中添加数据

Adding data in hidden DataColumn cells in DataSet

简单的问题!

我有 DataSet 填充了三个 DataTables。不知何故,我需要在 GridView 中隐藏一些列。现在有两种隐藏列的方法:

  1. 使用 DataColumn 从 DataTable 中隐藏列 MappingType 属性.

myDataSet.Tables("Managers").Columns("Id").ColumnMapping = MappingType.Hidden

  1. 直接从 GridView

    隐藏列

    GridView1.Columns("Id").Visible = False

    GridView1.Columns("Id").VisibleIndex = -1

现在隐藏列,我需要提供的功能是“添加新行”。当列被隐藏时,如何在新行中添加数据?

更准确地说,如何将数据放入隐藏的列单元格中?

假设我的 Id 列不是 Auto-Incremented

注意: 我在 VB.NET 桌面环境中工作。

我的假设是您将绑定源与 datagridview 一起使用?将数据集添加到项目的数据源(菜单:数据-> 添加新数据源)。然后菜单:数据->显示数据源。右键单击 table 和 select 将其显示为数据网格。将 table 拖到您的表单上。右键单击网格以编辑列。删除不需要的列,格式化其余列。设计器会自动为您创建绑定源。在您的表单代码中,select 左上方下拉列表中的 Bindsource,然后是右上方列表中的 'AddingNew'。将为您创建一个新事件。在事件中,添加以下代码:

   Private Sub YourTableBindingSource_AddingNew(ByVal sender As Object, _
                                              ByVal e As system.ComponentModel.AddingNewEventArgs) _
         Handles bsyourBinding.AddingNew

        Dim bs As BindingSource = CType(sender, BindingSource)
        Dim view As System.Data.DataView = CType(bs.List, System.Data.DataView)
        Dim _row As System.Data.DataRowView

        _row = view.AddNew
        dim newRow as yourDataSet.yourTableRow = DirectCast(_row.Row, yourDataSet.yourTableRow)
        With newRow 
            .BeginEdit()
            NextIDNumber += 1
            .MyIDField = NextIDNumber
            .MyDataField1 = Today.AddDays(1).Date
            .MyDataField2 = someData
            .MyDataField3 = someOtherData
            .EndEdit()
        End With
        bs.MoveLast()
        e.NewObject = _row
    End Sub

当您添加属于父 table 的记录时,此绑定源 AddingNew 事件特别有用。由于 table 使用绑定源绑定到网格,因此对绑定源所做的所有更改都会自动反映在网格中。您不必在网格中显示 ID 号。如果用户单击网格上的新行,将自动触发此绑定源事件。

我还会包含一些用于网格事件 CellParsing、CellValidating、CellValidated(使用它来清除错误消息并可能进行一些数学计算)和 RowValidating 的代码。在行验证中,您可以检查所有单元格是否都有值并且有效。如果用户留下了空行,你可以调用.CancelEdit删除空行,防止它被存储到数据库中。