在 DataSet 的隐藏 DataColumn 单元格中添加数据
Adding data in hidden DataColumn cells in DataSet
简单的问题!
我有 DataSet 填充了三个 DataTables。不知何故,我需要在 GridView 中隐藏一些列。现在有两种隐藏列的方法:
- 使用 DataColumn 从 DataTable 中隐藏列 MappingType 属性.
myDataSet.Tables("Managers").Columns("Id").ColumnMapping = MappingType.Hidden
直接从 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删除空行,防止它被存储到数据库中。
简单的问题!
我有 DataSet 填充了三个 DataTables。不知何故,我需要在 GridView 中隐藏一些列。现在有两种隐藏列的方法:
- 使用 DataColumn 从 DataTable 中隐藏列 MappingType 属性.
myDataSet.Tables("Managers").Columns("Id").ColumnMapping = MappingType.Hidden
直接从 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删除空行,防止它被存储到数据库中。