简单的问题!
我有 DataSet ,其中包含三个 DataTables 。不知何故,我需要在GridView中隐藏一些列。现在有两种隐藏列的方法:
myDataSet.Tables("Managers").Columns("Id").ColumnMapping = MappingType.Hidden
直接从 GridView
隐藏列 GridView1.Columns("Id").Visible = False
OR
GridView1.Columns("Id").VisibleIndex = -1
现在隐藏列,我需要提供的功能是“添加新行”。当列被隐藏时,我如何在新行中添加数据?
更准确地说,我如何将数据放入隐藏的列单元格中?
假设我的 ID 列不是自动增量。
注意:我在VB.NET桌面环境中工作。
答案 0 :(得分:0)
我的假设是您正在使用带有datagridview的bindingsource?将数据集添加到项目的数据源(菜单:数据 - >添加新数据源)。然后菜单:数据 - >显示数据源。右键单击表并选择将其显示为数据网格。将表拖到表单上。右键单击网格以编辑列。删除不需要的列,格式化其余列。设计人员将自动为您创建绑定源。在表单代码中,选择左上角下拉列表中的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
当您添加属于父表的记录时,此绑定源AddingNew事件特别有用。由于tableis使用绑定源绑定到网格,因此对绑定源所做的所有更改都会自动反映在网格中。您不必在网格中显示ID号。如果用户单击网格上的新行,则会自动触发此绑定源事件。
我还会为网格事件CellParsing,CellValidating,CellValidated(使用它来清除错误消息并可能做一些数学运算)和RowValidating包含一些代码。在行验证中,您可以检查所有单元格是否具有值并且是否有效。如果用户留下了一个空白行,您可以调用.CancelEdit删除该空白行,并防止它被存储到数据库中。