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

Рейтинг: 0Ответов: 2Опубликовано: 09.02.2023

сообщество!

Я ещё студент и имею немного опыта в 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);
        }
    }

Ответы

▲ 1Принят

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

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 < n; i++)
            {
                M[i] = random.Next(1, 100);

                dataGridView1[i, 0].Value = i;
                dataGridView1[i, 1].Value = M[i].ToString();
                
            }
▲ 1

При пошаговой отладке или попробовать убрать блок 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 < n; i++)
{
  M[i] = random.Next(1, 10);
  DataGridViewCell cell = new DataGridViewTextBoxCell();
  cell.Value = M[i];
  DataGridViewRow row = new DataGridViewRow();
  row.Cells.Add(cell);
  dataGridView1.Rows.Add(row);
}
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 < n; i++)
{
  M[i] = random.Next(1, 10);
  dataGridView1[i, rowIndex].Value = M[i].ToString();
}