按名称查找GridView列索引的方法

时间:2010-10-13 15:13:33

标签: c# asp.net

我正在尝试编写一个小方法来循环并通过其索引查找GridView列,因为它可以根据可见的内容更改位置。

这是我到目前为止所做的:

private int GetColumnIndexByName(GridView grid, string name)
{
    foreach (DataColumn col in grid.Columns)
    {
        if (col.ColumnName.ToLower().Trim() == name.ToLower().Trim()) return col.Ordinal;
    }

    return -1;
}

在这种情况下,DataColumn似乎不是正确使用的类型,但我对于我应该在这里做什么感到很遗憾。

我只能使用.NET 2.0 / 3.5。我不能用4.0。

7 个答案:

答案 0 :(得分:34)

我想通了,我需要使用DataControlField并略有不同的语法。

工作版本:

private int GetColumnIndexByName(GridView grid, string name)
    {
        foreach (DataControlField col in grid.Columns)
        {
            if (col.HeaderText.ToLower().Trim() == name.ToLower().Trim())
            {
                return grid.Columns.IndexOf(col);
            }
        }

        return -1;
    }

答案 1 :(得分:17)

我更喜欢收集迭代,但在这种情况下,为什么要担心foreachgrid.Columns.IndexOf调用的开销呢?只需使用索引遍历数组。

private int GetColumnIndexByName(GridView grid, string name)
{
    for(int i = 0; i < grid.Columns.Count; i++)
    {
        if (grid.Columns[i].HeaderText.ToLower().Trim() == name.ToLower().Trim())
        {
            return i;
        }
    }

    return -1;
}

答案 2 :(得分:2)

更好的解决方案适用于Datafield,SortExpression和headerText。

public static int GetBoundFieldIndexByName(this GridView gv,string name)
    {
        int index = 0;
        bool found = false;
        foreach (DataControlField c in gv.Columns)
        {
            if (c is BoundField)
            {
                BoundField field = (BoundField)c;
                if (name == field.DataField ||
                    name == field.SortExpression ||
                    name == field.HeaderText)
                {
                    found = true;
                    break;
                }
            }
            index++;
        }
        return found ? index : -1;
    }

答案 3 :(得分:0)

这样,对我有用(.NET Gridview):

    private int GetColumnIndexByName(GridView grid, string name)
    {
        for (int i = 0; i < grid.HeaderRow.Cells.Count; i++)
        {
            if (grid.HeaderRow.Cells[i].Text.ToLower().Trim() == name.ToLower().Trim())
            {
                return i;
            }
        }
        return -1;
    }

答案 4 :(得分:0)

<head>

</head>

<body>
  <img id="uparrow" src="uparrow.png" alt="Up" onclick="myfunction()">
  <p id="incremented"></p>

  <script>
    var incremented = 0;

    function myfunction() {
      document.getElementById("incremented").innerHTML = ++incremented;
    }
  </script>

</body>

答案 5 :(得分:0)

如果您需要一个列本身而不仅仅是它的索引,您可以使用一些Linq魔法:

DataControlField col=GridView1.Columns.Cast<DataControlField>().First(c => c.HeaderText == "Column_header")

答案 6 :(得分:0)

这是VB版本

Protected Function GetColumnIndexByHeaderText(grid As GridView, findHeader As String) As Integer
    Dim i As Integer = 0
    For i = 0 To grid.Columns.Count - 1
        If grid.Columns(i).HeaderText.ToLower().Trim() = findHeader.ToLower().Trim() Then
            Return i
        End If
    Next

    Return -1
End Function