【问题标题】:Add column to DataGridView (VB.NET)将列添加到 DataGridView (VB.NET)
【发布时间】:2018-04-17 15:50:45
【问题描述】:

我想在我的项目中添加一个新列,但是发生了一件奇怪的事情......

我的代码

adapter.fill(datatable)
dgv.datasource = datatable
dgv.columns.add("test","testHeader")

测试列的列索引应该是最后一个索引。 但是,我发现列索引是 0,原来的第 0 个索引变成了 1

我不确定发生了什么。是否有任何因素可能导致此问题? datagridview的属性设置不对?

【问题讨论】:

  • 顺便说一句,datagridview的最后一列还是显示了test列
  • 如果我在这个项目中添加另一个新的datagridview并做同样的事情,结果是同样的情况。
  • 如果我将此数据网格视图复制到另一个全新的项目中,一切都会像往常一样好。因此,我认为原来的项目应该有问题
  • 请尝试编辑问题。将您的 cmets 移动到问题正文并尝试添加更多详细信息(至少是 aspx 标记的相关部分)。否则这个问题可能会被关闭。
  • 贴出的代码没有重复问题。

标签: vb.net datagridview add


【解决方案1】:

很简单,先获取总列数,然后在末尾添加列:

  Dim col as New DataGridViewColumn
  col.HeaderText = "abc"

  dgv.Columns.Insert(dgv.ColumnCount, col)

如果上述代码没有帮助,请尝试将列添加到 IDataTable 本身:

 datatable.Columns.Add("Header text", GetType(System.String)).SetOrdinal(datatable.Columns.Count)

【讨论】:

  • 这是一个基于零的集合。下一个索引将是 ColumnCount NOT ColumnCount +1
  • 还是不行。在那一刻我添加了新列,新列的索引很好。但是,在屏幕上显示 dgv 后,新列的索引会自动更改为 0
  • @F.C.Hsiao,重新检查我的答案:)
【解决方案2】:

你的代码

adapter.fill(datatable)
dgv.datasource = datatable
dgv.columns.add("test","testHeader")

似乎工作正常。 我猜您正在重新填充 datagridview,这就是添加的列位于索引 0 中的原因。

尝试添加

dgv.DataSource = Nothing

您会注意到添加的列“test”、“testHeader”将位于索引 0 中。 重新设置

dgv.datasource = datatable 

将导致添加的列保持在索引 0,而数据表将被添加到后续列。

【讨论】:

    【解决方案3】:

    有一个DataGridViewColumn.DisplayedIndex 属性来控制可见列的顺序。

    请记住,DataGridView 会跟踪这些值并为网格中的其他列更新它们。将其中一些更改为 0 会将所有其他列更新为更高的值。

    【讨论】:

      【解决方案4】:

      试试这个代码添加列

         Dim col As New DataGridViewTextBoxColumn
          col.DataPropertyName = "PropertyName"
          col.HeaderText = "SomeText"
          col.Name = "colWhateverName"
          DataGridView1.Columns.Add(col)
      

      【讨论】:

        【解决方案5】:

        这是可行的,因为我们克隆了现有列,而您不能附加表中已经存在的列。这还具有克隆应用于现有列的所有列设置的好处。

        克隆现有列:

            Dim Newtestcolumn As DataGridViewColumn = Existingcolumn.Clone
        

        调整标题文本:

            Newtestcolumn.HeaderText = "test"
        

        向datagridview添加列:

            DataGridView1.Columns.Add(test)
        

        如果添加的列与当前绘图格式不匹配,则需要通过调用更新datagridview对象:

            DataGridView1.Update()
        

        如果您想写入特定列或者您不知道列名 你用它来返回列的数量,然后指向第 0 列来克隆 fx。

         Dim Index = DataGridView1.Columns.GetColumnCount(DataGridViewElementStates.None)
        

        您可以像这样指定列索引:

            DataGridView1.Columns.Item(index)
        

        回到我们要写的第一行

            Dim Newtestcolumn As DataGridViewColumn = DataGridView1.Columns.Item(index).clone
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多