Подтвердить что ты не робот

Индекс столбца datagridview

У меня есть форма с виджем DataGridView, и мне нужно получить индекс столбца с выбранным именем.

Например, скажем, что у меня есть таблица с двумя столбцами: Name, Surname. Мне нужен способ получить индекс имени столбца. Проблема в том, что он изменяется все время в зависимости от DataSource, но этот столбец всегда имеет одно и то же имя "Имя".

Кто-нибудь знает, как решить проблему?

4b9b3361

Ответ 1

Чтобы получить столбец DataGridView по имени, вы просто ссылаетесь на него с помощью индексатора коллекции столбцов:

datagridview1.Columns["columnName"]

Затем вы можете получить индекс столбца из этого столбца:

datagridview1.Columns["columnName"].Index;

Обратите внимание, что если вы используете недопустимое имя столбца, то эта ссылка вернет значение null, поэтому вы можете проверить, что ссылка на столбец не является нулевой до ее использования, или сначала использовать коллекцию столбцов .Contains().

Ответ 2

Если я прав, e.ColumnIndex также будет работать для этого. вы можете проверить документацию MSDN здесь

Ответ 3

Вы можете получить индекс, используя свойство Index виджета DataGridViewColumn:

ColumnName.Index

Это позволяет избежать необходимости проверять, является ли имя столбца допустимым во время выполнения, поскольку оно генерирует ошибку компиляции, если столбец не существует. Это также упрощает рефакторинг.

Я рекомендую вам дать столбцам разумное имя (например, DCOL_SomeName), чтобы вы могли их легко отличить. Включение имени виджета DataGridView поможет, если у вас есть несколько виджетов DataGridView в той же форме.

Ответ 4

создать статический класс под кодом

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");