Метод поиска индекса столбца GridView по имени
Я пытаюсь написать небольшой метод для прокрутки и найти столбец 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.
Ответы
Ответ 1
Я понял, мне нужно было использовать 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;
}
Ответ 2
Я предпочитаю сборку итераций, но зачем беспокоиться об издержках вызова 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;
}
Ответ 3
Лучшее решение, которое работает для 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;
}
Ответ 4
Этот способ работает для меня (.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;
}
Ответ 5
//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;
}