Метод поиска индекса столбца GridView по имени - PullRequest
20 голосов
/ 13 октября 2010

Я пытаюсь написать небольшой метод, чтобы перебрать и найти столбец GridView по его индексу, поскольку он может изменять положение в зависимости от того, что может быть видимым.

Вот что у меня такfar:

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 ]

34 голосов
/ 13 октября 2010

Я понял, мне нужно было использовать 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;
    }
17 голосов
/ 27 августа 2012

Я предпочитаю итерацию сбора, но зачем в этом случае использовать издержки foreach и grid.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 голосов
/ 07 октября 2014

Лучшее решение, которое работает для 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;
    }
1 голос
/ 16 марта 2018

Если вам нужен сам столбец, а не только его индекс, вы можете использовать магию Linq:

DataControlField col=GridView1.Columns.Cast<DataControlField>().First(c => c.HeaderText == "Column_header")
0 голосов
/ 16 декабря 2018

Вот версия 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
0 голосов
/ 19 июня 2017
//Get index of column by header text.
    int GetColumnIndexByName(GridViewRow row, string headerText)
    {
        int columnIndex = 0;
        foreach (DataControlFieldCell cell in row.Cells)
        {
            if(cell.ContainingField is TemplateField){
                if(((TemplateField)cell.ContainingField).HeaderText.Equals(headerText))
                {
                    break;
                } 
            }
          if(cell.ContainingField is BoundField){
                    if (((BoundField)cell.ContainingField).HeaderText.Equals(headerText))
                {
                    break;
                }
          }
            columnIndex++; 
        }


        return columnIndex;
    }
0 голосов
/ 09 октября 2014

Таким образом, у меня работает (.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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...