Как вывести массив в datagridview c
Перейти к содержимому

Как вывести массив в datagridview c

  • автор:

Как вывести массив в datagridview c

Регистрация: 15.12.2014

Сообщений: 24

datagridview двумерный массив

Помогите разобрать функции комментариями
не совсем понимаю некоторые функции и методы.
Суть в том, что заполняется datagridview вручную или случайно, размер задается с помощью numericupdown.
программа вычисляет количество элементов, кратных 3, в каждом столбце массива и указывает столбец, содержащий наибольшее количество чисел кратных 3

 < public partial class Form1 : Form < int ArrRows; int ArrColumns; int[,] Arr; public Form1() < InitializeComponent(); ArrRows = (int)numericUpDown1.Value; ArrColumns = (int)numericUpDown2.Value; DataToDGW(ArrRows, ArrColumns);// выводит в datagridview заданную таблицу // при включенном radioButton2 заполняет случайными числами, иначе вручную if (radioButton2.Checked) RndData(dataGridView1); else ZeroData(dataGridView1); >void DataToDGW(int arrRows, int arrColumns) < //удаляем строки в таблице dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); for (int i = 0; i < arrColumns; i++) dataGridView1.Columns.Add(i.ToString(), i.ToString()); for (int i = 0; i < arrRows; i++) dataGridView1.Rows.Add(); >void RndData(DataGridView dgv) < Random rnd = new Random(); for (int i = 0; i < dgv.Rows.Count; i++) < for (int j = 0; j < dgv.Rows[i].Cells.Count; j++) < dgv.Rows[i].Cells[j].Value = rnd.Next(-100, 100); >> > void ZeroData(DataGridView dgv) < for (int i = 0; i < dgv.Rows.Count; i++) < for (int j = 0; j < dgv.Rows[i].Cells.Count; j++) < dgv.Rows[i].Cells[j].Value = 0; >> > int[] Calcdata(DataGridView dgv) < Arr = new int[dgv.Rows.Count, dgv.Columns.Count]; int[] res = new int[dgv.Columns.Count]; for (int i = 0; i < dgv.Rows.Count; i++) < for (int j = 0; j < dgv.Rows[i].Cells.Count; j++) < if (Convert.ToInt32(dgv.Rows[i].Cells[j].Value) % 3 == 0) < res[j] ++; >> > return res; > private void numericUpDown1_ValueChanged(object sender, EventArgs e) < ArrRows = (int)numericUpDown1.Value; DataToDGW(ArrRows, ArrColumns); if (radioButton2.Checked) RndData(dataGridView1); else ZeroData(dataGridView1); >private void numericUpDown2_ValueChanged(object sender, EventArgs e) < ArrColumns = (int)numericUpDown2.Value; DataToDGW(ArrRows, ArrColumns); if (radioButton2.Checked) RndData(dataGridView1); else ZeroData(dataGridView1); >private void button1_Click(object sender, EventArgs e) < try < int[] res = Calcdata(dataGridView1); label1.Text = "Номер столбцов с числами % 3: "; Array.ForEach(res, x =>label1.Text += x.ToString() + ","); if (label1.Text[label1.Text.Length - 1] == ',') label1.Text = label1.Text.Remove(label1.Text.Length - 1, 1); int indexCol = -1; var maxArRes = res.Max(); for (int i = 0; i < res.Length; i++) < if (maxArRes == res[i]) < indexCol = i; break; >> label2.Text = "№ Столбца с максимальным количеством элементов % 3: " +indexCol.ToString(); dataGridView1.ClearSelection(); for (int i = 0; i < dataGridView1.Rows.Count; i++) < dataGridView1.Rows[i].Cells[indexCol].Selected = true; dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[indexCol]; >> catch(Exception) < MessageBox.Show("Ошибка ввода!\n"); >> private void radioButton1_CheckedChanged(object sender, EventArgs e) < ZeroData(dataGridView1); >private void radioButton2_CheckedChanged(object sender, EventArgs e) < RndData(dataGridView1); >> >

Практическое руководство. Получение информации о выделенных пользователем ячейках, строках и столбцах элемента управления 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, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Использование Visual C# для привязки элемента управления DataGrid к массиву объектов или структур

В этой статье содержатся сведения о том, как привязать массив объектов к элементу управления DataGrid.

Исходная версия продукта: Visual C#
Исходный номер базы знаний: 315786

Сводка

Пример в этой статье состоит из формы Windows с элементом управления DataGrid для отображения значений свойств объекта и четырех кнопок команд для просмотра строк элемента управления DataGrid.

Требования

В этой статье предполагается, что вы знакомы со следующими разделами:

  • Основные понятия программирования Visual C#
  • Visual C# .NET

Проектирование класса

Класс, который должен быть привязан к элементу управления, должен иметь методы доступа к свойствам. Любое свойство, которое должно быть привязано, должно иметь метод свойства Set и метод свойства Get . Пример класса, используемый в этой статье, состоит из трех членов. В этой статье описан только один элемент. Также предоставлен параметризованный конструктор. Однако это не обязательно.

public class guitar < private string make; private string model; private short year; public guitar() < >public guitar(string make, string model, short year) < Make=make; Model=model; Year=year; >public string Make < get < return make; >set < make = value; >> > 

Добавление экземпляров класса в массив

Чтобы создать экземпляры и добавить их в массив, выполните следующие действия:

  1. Объявите массив.
  2. Создайте экземпляры класса , а затем добавьте экземпляры в массив.

private guitar[] arr=new guitar[3]; arr[0] = new guitar("Gibson", "Les Paul", 1958); arr[1] = new guitar("Fender", "Jazz Bass", 1964); arr[2] = new guitar("Guild", "Bluesbird", 1971); 

Привязка массива к элементу управления DataGrid

После заполнения массива задайте для свойства DataSource элемента управления DataGrid значение массива. Столбцы в элементе управления DataGrid заполняются на основе свойств, для которых существуют область методы доступа к свойствам.

dataGrid1.DataSource=arr; 

Предоставление средств для просмотра массива

Вы можете использовать для CurrencyManager просмотра массива. Для этого свяжите CurrencyManager с элементом BindingContext управления ( в данном случае — массивом ).

private CurrencyManager currencyManager=null; currencyManager = (CurrencyManager)dataGrid1.BindingContext[arr]; 

Класс CurrencyManager имеет Position свойство, которым можно управлять, чтобы выполнять итерацию по элементам массива. Добавив или вычитая из текущего Position значения , можно просматривать строки DataGrid элемента управления.

//Move forward one element. currencyManager.Position++; //Move back one element. currencyManager.Position--; //Move to the beginning. currencyManager.Position = 0; //Move to the end. currencyManager.Position = arr.Length - 1; 

Пошаговый пример

  1. В Visual C# .NET создайте проект приложения Windows. Форма Form1 создается по умолчанию.
  2. Добавьте класс в проект.
  3. Замените код в Class1.cs следующим кодом.
public class guitar < private string make; private string model; private short year; public guitar() < >public guitar(string Make, string Model, short Year) < make=Make; model=Model; year=Year; >public string Make < get < return make; >set < make = value; >> public string Model < get < return model; >set < model = value; >> public short Year < get < return year; >set < year = value; >> > 
private guitar[] arr=new guitar[3]; private CurrencyManager currencyManager=null; 
arr[0] = new guitar("Gibson", "Les Paul", 1958); arr[1] = new guitar("Fender", "Jazz Bass", 1964); arr[2] = new guitar("Guild", "Bluesbird", 1971); currencyManager = (CurrencyManager)dataGrid1.BindingContext[arr]; dataGrid1.DataSource=arr; 
currencyManager.Position++; 
currencyManager.Position--; 
currencyManager.Position = 0; 
currencyManager.Position = arr.Length - 1; 

Примечание. При необходимости можно изменить значения объектов.

Используйте структуру вместо класса

Правила привязки структуры совпадают с правилами привязки объекта. Требуется свойство, являющееся элементами доступа. Структура, созданная для этой цели, похожа на класс .

Чтобы выполнить привязку к массиву структур, выполните следующие действия.

    Измените определение модуля класса Class1.cs в примере с

public class guitar 

к следующему примеру:

public struct guitar 
//public guitar() // < //>

Ссылки

Дополнительные сведения см. в разделе Потребители данных в Windows Forms справки visual Studio .NET Online.

Обратная связь

Были ли сведения на этой странице полезными?

В dataGridView не получается вывести элементы массива C#

сообщество! Я ещё студент и имею немного опыта в WinForms, нужно по заданию сгенерировать массив из N количества случайных чисел (одномерный массив) в элемент dataGridView. При попытке сгенерировать — выдаёт ошибку. Скриншот окна, а так же код, который не выполняет задание ниже: В редакторе WinForms При работе

private void btn_mass_Click(object sender, EventArgs e) < Random random= new Random(); dataGridView1.AutoGenerateColumns = true; int n = int.Parse(numericUpDown1.Text); try < int[] M = new int[n]; for (int i = 0; i < n; i++) < M[i] = random.Next(1, 10); dataGridView1[i, 10].Value = M[i].ToString(); >> catch (Exception) < string text = "Неизвестная ошибка!"; MessageBox.Show( text, "Отказано в доступе!", // заголовок MessageBoxButtons.OK, // кнопка ок MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); >> 

Отслеживать
задан 9 фев 2023 в 12:32
e.shikhanov e.shikhanov
53 7 7 бронзовых знаков
Поставьте внутрь catch breakpoint и с помощью дебаггера посмотрите, какой Exception происходит
9 фев 2023 в 12:49

Я так понимаю, колонок в гриде нет. И строк тоже. Отсюда и ошибка. Их нужно добавлять вручную. AutoGenerateColumns сработает только при привязке данных (binding).

9 фев 2023 в 13:23

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Спасибо всем, кто пытался помочь, реализовал код так: (он работает)

Random random= new Random(); int n = Convert.ToInt32(numericUpDown1.Value); dataGridView1.RowCount = 2; dataGridView1.ColumnCount = n; int[] M = new int[n]; for (int i = 0; i

Отслеживать
ответ дан 9 фев 2023 в 15:27
e.shikhanov e.shikhanov
53 7 7 бронзовых знаков

При пошаговой отладке или попробовать убрать блок try catch , то видна ошибка: «Index was out of range. Must be non-negative and less than the size of the collection. Arg_ParamName_Name». Это говорит о том, что по данной строке/столбец не найдена ячейка. Т. е. вы пытались в столбец i на 10-ую строку вписать значение рандома.

Есть несколько вариантов ввода данных в DataGridView, но пожалуй вам подойдет такой:

1. Добавьте через конструктор столбец в DataGridView:

Меню свойства Изменить столбцы

2. Внутри цикла добавить код для создания ячеек и строк:

for (int i = 0; i
Update

Только сейчас понял, что сделал ответ на добавление строк. Моя ошибка :). Добавлю еще один пример, в этом случае добавление столбцов и данных на пустой DataGridView:

Random random = new Random(); dataGridView1.AutoGenerateColumns = true; int n = 25; // здесь значение от Input int[] M = new int[n]; for (int i = 0; i < n; i++) < DataGridViewColumn column = new DataGridViewColumn(); column.CellTemplate = new DataGridViewTextBoxCell(); column.HeaderText = "Col" + (i + 1).ToString(); column.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; dataGridView1.Columns.Add(column); >int rowIndex = dataGridView1.Rows.Add(); for (int i = 0; i

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *