在DataSet

时间:2015-07-10 06:53:32

标签: .net vb.net gridview datatable dataset

简单的问题!

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

  1. 使用DataColumn MappingType属性隐藏DataTable中的列。
  2. myDataSet.Tables("Managers").Columns("Id").ColumnMapping = MappingType.Hidden

    1. 直接从 GridView

      隐藏列

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

    2. OR

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

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

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

      假设我的 ID 列不是自动增量

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

1 个答案:

答案 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删除该空白行,并防止它被存储到数据库中。