Практическое руководство. Получение информации о выделенных пользователем ячейках, строках и столбцах элемента управления DataGridView в Windows Forms
Выбранные ячейки, строки или столбцы можно получить из элемента управления DataGridView с помощью соответствующих свойств: SelectedCells, SelectedRows и SelectedColumns. В следующих процедурах вы получите выбранные ячейки и отобразите их индексы строк и столбцов в строке MessageBox.
Получение выбранных ячеек в элементе управления DataGridView
- Используйте свойство SelectedCells.
Примечание. Чтобы избежать отображения потенциально большого количества ячеек, используйте метод AreAllCellsSelected.
private void selectedCellsButton_Click(object sender, System.EventArgs e) < Int32 selectedCellCount = dataGridView1.GetCellCount(DataGridViewElementStates.Selected); if (selectedCellCount >0) < if (dataGridView1.AreAllCellsSelected(true)) < MessageBox.Show("All cells are selected", "Selected Cells"); >else < System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < selectedCellCount; i++) < sb.Append("Row: "); sb.Append(dataGridView1.SelectedCells[i].RowIndex .ToString()); sb.Append(", Column: "); sb.Append(dataGridView1.SelectedCells[i].ColumnIndex .ToString()); sb.Append(Environment.NewLine); >sb.Append("Total: " + selectedCellCount.ToString()); MessageBox.Show(sb.ToString(), "Selected Cells"); > > >
Private Sub selectedCellsButton_Click( _ ByVal sender As Object, ByVal e As System.EventArgs) _ Handles selectedCellsButton.Click Dim selectedCellCount As Integer = _ dataGridView1.GetCellCount(DataGridViewElementStates.Selected) If selectedCellCount > 0 Then If dataGridView1.AreAllCellsSelected(True) Then MessageBox.Show("All cells are selected", "Selected Cells") Else Dim sb As New System.Text.StringBuilder() Dim i As Integer For i = 0 To selectedCellCount - 1 sb.Append("Row: ") sb.Append(dataGridView1.SelectedCells(i).RowIndex _ .ToString()) sb.Append(", Column: ") sb.Append(dataGridView1.SelectedCells(i).ColumnIndex _ .ToString()) sb.Append(Environment.NewLine) Next i sb.Append("Total: " + selectedCellCount.ToString()) MessageBox.Show(sb.ToString(), "Selected Cells") End If End If End Sub
Получение выбранных строк в элементе управления DataGridView
- Используйте свойство SelectedRows. Чтобы разрешить пользователям выбирать строки, необходимо задать свойству SelectionMode значение FullRowSelect или RowHeaderSelect.
private void selectedRowsButton_Click(object sender, System.EventArgs e) < Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected); if (selectedRowCount >0) < System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < selectedRowCount; i++) < sb.Append("Row: "); sb.Append(dataGridView1.SelectedRows[i].Index.ToString()); sb.Append(Environment.NewLine); >sb.Append("Total: " + selectedRowCount.ToString()); MessageBox.Show(sb.ToString(), "Selected Rows"); > >
Private Sub selectedRowsButton_Click( _ ByVal sender As Object, ByVal e As System.EventArgs) _ Handles selectedRowsButton.Click Dim selectedRowCount As Integer = _ dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected) If selectedRowCount > 0 Then Dim sb As New System.Text.StringBuilder() Dim i As Integer For i = 0 To selectedRowCount - 1 sb.Append("Row: ") sb.Append(dataGridView1.SelectedRows(i).Index.ToString()) sb.Append(Environment.NewLine) Next i sb.Append("Total: " + selectedRowCount.ToString()) MessageBox.Show(sb.ToString(), "Selected Rows") End If End Sub
Получение выбранных столбцов в элементе управления DataGridView
- Используйте свойство SelectedColumns. Чтобы разрешить пользователям выбирать столбцы, необходимо задать свойству SelectionMode значение FullColumnSelect или ColumnHeaderSelect.
private void selectedColumnsButton_Click(object sender, System.EventArgs e) < Int32 selectedColumnCount = dataGridView1.Columns .GetColumnCount(DataGridViewElementStates.Selected); if (selectedColumnCount >0) < System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < selectedColumnCount; i++) < sb.Append("Column: "); sb.Append(dataGridView1.SelectedColumns[i].Index .ToString()); sb.Append(Environment.NewLine); >sb.Append("Total: " + selectedColumnCount.ToString()); MessageBox.Show(sb.ToString(), "Selected Columns"); > >
Private Sub selectedColumnsButton_Click( _ ByVal sender As Object, ByVal e As System.EventArgs) _ Handles selectedColumnsButton.Click Dim selectedColumnCount As Integer = dataGridView1.Columns _ .GetColumnCount(DataGridViewElementStates.Selected) If selectedColumnCount > 0 Then Dim sb As New System.Text.StringBuilder() Dim i As Integer For i = 0 To selectedColumnCount - 1 sb.Append("Column: ") sb.Append(dataGridView1.SelectedColumns(i).Index.ToString()) sb.Append(Environment.NewLine) Next i sb.Append("Total: " + selectedColumnCount.ToString()) MessageBox.Show(sb.ToString(), "Selected Columns") End If End Sub
Компиляция кода
Для этого примера требуются:
- элементы управления Button с именами selectedCellsButton , selectedRowsButton и selectedColumnsButton , каждый из которых имеет обработчики для присоединенного события Click;
- элемент управления DataGridView с именем dataGridView1 ;
- ссылки на сборки System, System.Windows.Forms и System.Text.
Отказоустойчивость
При выборе большого количества ячеек, строк или столбцов коллекции, описанные в этом разделе, работают неэффективно. Дополнительные сведения об использовании этих коллекций с большим объемом данных см. в статье Масштабирование элемента управления DataGridView Windows Forms.
См. также
- DataGridView
- SelectionMode
- AreAllCellsSelected
- SelectedCells
- SelectedRows
- SelectedColumns
- Выделение данных и операции с буфером обмена в элементе управления DataGridView в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
DataGridView обращение к столбцу и строке (ячейке)
Есть 2 формы 1 форма — водим в TextBox ФИО и телефон, также путем расчета в один из Label выводится сумма к оплате 2 форма — подвешен компонент DatаGridView Вопрос: как в DatаGridView путем обращения добавить данные из TextBox(ов) и Label(ов) ? По возможности в следующем порядке — Фамилия, Имя, Отчество, Телефон, Сумма(заказа).
n = Sell.dataGridView1.RowCount; if (comboBox1.SelectedIndex == 0) label14.Text = ysl.dataGridView2.Rows[n].Cells[n].Value; // = sum; sum = label14.Text Sell.table1TableAdapter.Insert(n + 1, textBox4.Text, textBox3.Text, textBox1.Text, textBox2.Text, label14.Text); // textBox.Text);
Вот такой набросок с учетом добавления на форму ComboBox (но речь сейчас не об этом). Помогите примером пожалуйста.
Отслеживать
20.2k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак
задан 11 фев 2016 в 18:17
DevilScream DevilScream
91 2 2 серебряных знака 14 14 бронзовых знаков
Как обратиться к ячейке datagridview в c
DataGridView — стандартный GUI компонент для отображения и редактирования таблиц. Здесь коротко рассмотрены основные моменты работы с этим классом.
Перекиньте стандартным способом в форму компонент DataGridView.

Источник данных при создании можно не указывать, так как DataGridView позволяет хранить данные внутри себя и добавлять/удалять их на лету, во время выполнения (runtime). После этого редактором свойств настройте поведение по умолчанию нового экземпляра DataGridView. Я обычно меняю свойства AllowUserToAddRows на false, AllowUserToDeleteRows на false, ReadOnly на true. Можно также переименовать экземпляр из dataGridView1 в что-нибудь более осмысленное, подходящее для Вашей программы.
Добавление строк и столбцов. Столбцы и строки можно добавлять во время выполнения программы (подробнее см. [1]). Пример добавления строк:
dataGridView1->Rows->Add();
Однако если назначение и структура таблицы (количество и наименование столбцов) известны заранее, то можно редактором свойств добавить столбцы. Для этого редактируют свойство Columns.

Стиль текста заголовка. Пример, как можно установить жирный шрифт в заголовке таблицы:
DataGridView dgv = 0 == tabControl1.SelectedIndex ? ОсновнойDGV : РезервDGV; DataGridViewCellStyle style = dgv.ColumnHeadersDefaultCellStyle; style.Font = new Font(style.Font, FontStyle.Bold); // Жирный текст
Как поменять цвет фона заголовка и цвет шрифта:
dgv.EnableHeadersVisualStyles = false; dgv.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy; dgv.ColumnHeadersDefaultCellStyle.ForeColor = Color.White;
Работа с ячейками. Обращение к ячейкам DataGridView довольно простое. Индексация столбцов (Columns) и строк (Rows) идет относительно нуля. Столбец с индексом 0 самый левый, и строка с индексом 0 самая верхняя. Количество строк можно получить через свойство RowCount. Добавляются строки методом Удаляются строки методом Rows->Add(), удаляются методом Rows->RemoveAt(номер строки). Пример добавления и удаления строк:
// Добавим в dataGridView1 4 строки: dataGridView1->Rows->Add(); dataGridView1->Rows->Add(); dataGridView1->Rows->Add(); dataGridView1->Rows->Add();
// Удалим все строки из dataGridView1:
while (0 != dataGridView1->RowCount) dataGridView1->Rows->RemoveAt(0);
Более простой способ удаления строк:
dataGridView1->Rows->Clear();
Текущая строка. Узнать номер текущей строки можно через HitTestInfo->RowIndex:
int idx = dataGridView1->HitTestInfo->RowIndex;
Установить (поменять) текущую строку можно через свойство CurrentCell (в примере устанавливаем третью текущую строку):
int idx = 2; dataGridView1->CurrentCell = dataGridView1->Rows[idx]->Cells[0];
Текущая строка помечена в таблице треугольничком:

// Необязательный шаг: отмена выделения текущей ячейки,
// чтобы она не подкрашивалась: dataGridView1->CurrentCell->Selected = false;
Вид таблицы после отмены выделения текущей ячейки:

Изменение данных в ячейках. Менять данные в ячейках таблицы можно только тогда, когда существуют соответствующий столбец и соответствующая строка, иначе произойдет ошибка выполнения («System.ArgumentOutOfRangeException» произошло в mscorlib.dll Дополнительные сведения: Индекс за пределами диапазона. Индекс должен быть положительным числом, a его размер не должен превышать размер коллекции.). После добавления строки методом Add все значения в ячейках добавленной строки будут пустые. К ячейке таблицы можно обращаться по номеру столбца и номеру строки через свойство Value.
Пример добавления строк и заполнения таблицы:
int i = 0; //нумерация строк начинается с 0
if ( (dataGridView1->RowCount - 1) i ) dataGridView1->Rows->Add();
// № строки добавляем в первый столбец Cells[0]: dataGridView1->Rows[i]->Cells[0]->Value = (i+1).ToString();
// Текст добавим во второй столбец Cells[1]: dataGridView1->Rows[i]->Cells[1]->Value = "Текст в ячейке";
i++; //переходим к следующей строке dataGridView1->Rows[i]->Cells[0]->Value = (i+1).ToString(); .
Стиль, цвет текста. Внешний вид текста в ячейке можно менять через свойство Style. Пример изменения цвета нужной ячейки на C#:
private void msgtable(string msg, Color textcolor) < dataGridView1.Rows[rowidx].Cells[2].Style.ForeColor = textcolor; dataGridView1.Rows[rowidx].Cells[2].Value = msg; >
case TCalibReport.ITERATE_OK: msgtable("OK", Color.Green); break; .

Пример изменения шрифта ячейки на жирный:
Font font = new Font(DataGridView.DefaultFont, FontStyle.Bold); dgv.Rows[ТекущаяСтрока].Cells[ТекущийСтолбец].Style.Font = font;
Как обращаться к столбцам не по их индексу, а по имени? Нумерация строк и столбцов начинается с нуля, и когда нам нужно обратиться к конкретной ячейке строки, то это можно сделать через числовой индекс: Rows[индексстроки].Cells[индексстолбца]. Однако есть удобная возможность получить индекс столбца по имени типа столбца:
dgv.Rows[ТекущаяСтрока].Cells[УровеньУст.Index].Value = Установлено.ToString("F2", ci); dgv.Rows[ТекущаяСтрока].Cells[УровеньСчит.Index].Value = Считано.ToString("F2", ci);
В этом примере УровеньУст и УровеньСчит — типы столбцов, которые были установлены во время компиляции визуальным редактированием свойства Columns таблицы dgv. Используется свойство Index этих типов.

Клик на заголовке строки. Обработка клика на заголовке строки на C#:
private void dataGridView1_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
Как удалить последнюю пустую строку?

Ответ: после манипуляции со строками и добавления новых строк установите в false свойство AllowUserToAddRows :
dataGridView1.AllowUserToAddRows = false;
1. Все о DataGridView. Учебник site:datagridview.narod.ru.
2. C#: экспорт/импорт DataGridView в XML и HTML.
Практическое руководство. Считывание и установка значения текущей ячейки элемента управления DataGridView в Windows Forms
Для взаимодействия с DataGridView часто требуется программно определить активную ячейку. Также может потребоваться изменить текущую ячейку. Эти задачи можно выполнить с помощью свойства CurrentCell.
Нельзя задать текущую ячейку в строке или столбце со свойством Visible установленным в значение false .
В зависимости от режима выбора элемента управления DataGridView изменение текущей ячейки может изменить выделение. Дополнительные сведения см. в разделе Режимы выделения содержимого элемента управления DataGridView в Windows Forms.
Получение текущей ячейки программным способом
- Используйте свойство CurrentCell элемента управления DataGridView.
private void getCurrentCellButton_Click(object sender, System.EventArgs e) < string msg = String.Format("Row: , Column: ", dataGridView1.CurrentCell.RowIndex, dataGridView1.CurrentCell.ColumnIndex); MessageBox.Show(msg, "Current Cell"); >
Private Sub getCurrentCellButton_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles getCurrentCellButton.Click Dim msg As String = String.Format("Row: , Column: ", _ dataGridView1.CurrentCell.RowIndex, _ dataGridView1.CurrentCell.ColumnIndex) MessageBox.Show(msg, "Current Cell") End Sub
Установка текущей ячейки программным способом
- Установите свойство CurrentCell элемента управления DataGridView. В следующем примере кода в качестве текущей ячейки задана ячейка в строке 0 и столбце 1.
private void setCurrentCellButton_Click(object sender, System.EventArgs e) < // Set the current cell to the cell in column 1, Row 0. this.dataGridView1.CurrentCell = this.dataGridView1[1,0]; >
Private Sub setCurrentCellButton_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles setCurrentCellButton.Click ' Set the current cell to the cell in column 1, Row 0. Me.dataGridView1.CurrentCell = Me.dataGridView1(1, 0) End Sub
Компиляция кода
Для этого примера требуются:
- элементы управления Button с именами getCurrentCellButton и setCurrentCellButton ; В Visual C# необходимо присоединить события Click для каждой кнопки к связанному обработчику событий в примере кода;
- элемент управления DataGridView с именем dataGridView1 ;
- ссылки на сборки System и System.Windows.Forms.
См. также
- DataGridView
- DataGridView.CurrentCell
- Базовые характеристики столбцов, строк и ячеек элемента управления DataGridView в Windows Forms
- Режимы выделения содержимого элемента управления DataGridView в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.