【问题标题】:datagridview column indexdatagridview 列索引
【发布时间】:2011-09-30 21:01:08
【问题描述】:

我有一个带有DataGridView 小部件的表单,我需要获取具有所选名称的列的索引。

例如,假设我有一个包含 2 列的表:姓名、姓氏。我需要一种方法来获取列名的索引。问题是它一直根据DataSource 而变化,但该列始终具有相同的名称“名称”。

有谁知道如何解决这个问题?

【问题讨论】:

    标签: c# datagridview indexing


    【解决方案1】:

    我发现使用列对象的 Name 属性比使用列名作为字符串更安全,因为这样可以在将来进行更一致的代码重构。

    datagridview1.Columns[column1.Name].Index;
    

    此外,重要的是首先确保该列不为空,并且正如其他人所说,它包含在 datagridview 中。

    【讨论】:

      【解决方案2】:

      在代码下面创建一个静态类

      public static class MyTools
      {
          public static int IndexByName(this DataGridView dgv, string name)
          {
              foreach(DataGridViewColumn col in dgv.Columns)
              {
                  if(col.HeaderText.ToUpper().Trim() == name.ToUpper().Trim())
                  {
                      return col.Index;
                  }
              }
              return -1;
          }
      }
      

      然后用你的 dataGridView 调用它

      int index = datagridview1.IndexByName("columnName");
      

      【讨论】:

        【解决方案3】:

        可以通过the Index property of the DataGridViewColumn widget获取索引,如下:

        ColumnName.Index
        

        这避免了在运行时检查列名是否有效的需要,因为如果列不存在则会产生编译错误。这也使重构更容易。

        我建议您给列起一个合理的名称(例如DCOL_SomeName),以便您可以轻松区分它们。如果您在同一个表单上有多个 DataGridView 小部件,包括 DataGridView 小部件的名称会有所帮助。

        【讨论】:

          【解决方案4】:

          要按名称检索DataGridView 列,您只需通过列集合索引器引用它:

          datagridview1.Columns["columnName"]
          

          然后就可以从该列获取列索引:

          datagridview1.Columns["columnName"].Index;
          

          请注意,如果您使用无效的列名,则此引用将返回 null,因此您可能需要在使用之前检查列引用不为 null,或者先使用列集合 .Contains() 方法。

          【讨论】:

          • 为了安全起见(对于其他用户),您应该首先检查该列是否存在:datagridview1.Columns.Contains("ColumnName")
          • @ginalster 谢谢 - 好点,我已将其添加到答案中。
          【解决方案5】:

          如果我是对的,e.ColumnIndex 也可以解决这个问题。你可以查看 MSDN 文档 here

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多