Как я могу вручную добавить данные в dataGridView? - PullRequest
10 голосов
/ 23 мая 2011

Я пытаюсь запустить этот код и получаю исключение:

Индекс был вне диапазона.Должен быть неотрицательным и меньшим, чем размер коллекции.Имя параметра: index

private void LoadStudentGrades(int gradeParaleloId, int subjectId)
{
    GradeStudentRepository gradeStudentRepo = new GradeStudentRepository();
    students = gradeStudentRepo.FindAllGradeStudents().Where(g => g.GradeParaleloId == gradeParaleloId)
                .Select(g => g.Student);

    int i = 1;
    foreach (var student in students)
    {
        DataGridViewRow row = new DataGridViewRow();

        row.Cells[0].Value = i.ToString();
        row.Cells[1].Value = student.LastNameFather + " " + student.LastNameMother + ", " + student.Name;

        dataGridView1.Rows.Add(row);
        i++;
    }
}

Я вручную создал столбцы в таблице данных, и теперь я хотел бы заполнить поля с помощью этого небольшого метода.

Ответы [ 5 ]

28 голосов
/ 02 февраля 2013

Вам просто не хватает одной строки: -P

DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dataGridView1);  // this line was missing
row.Cells[0].Value = "Cell1";
row.Cells[1].Value = "Cell2";
dataGridView1.Rows.Add(row);
7 голосов
/ 06 ноября 2012

Это просто,

myDataGridView.Rows.Add(value1, value2, value3...);

Это сработало, когда я предварительно настроил свой DGV для столбцов данных, поступающих через графический интерфейс.Так что в вашем случае это будет выглядеть так:

private void LoadStudentGrades(int gradeParaleloId, int subjectId)
{
    GradeStudentRepository gradeStudentRepo = new GradeStudentRepository();
    students = gradeStudentRepo.FindAllGradeStudents().Where(g => g.GradeParaleloId == gradeParaleloId).Select(g => g.Student);

    int i = 1;
    foreach (var student in students)
    {
        dataGridView1.Rows.Add(i.ToString(), student.LastNameFather + " " + student.LastNameMother + ", " + student.Name);
        i++;
    }
}

Может быть, вам придется настроить DGV для столбцов и их имен отдельно.

3 голосов
/ 23 мая 2011

В новой строке 0 ячеек, поэтому вы получаете это исключение.Вы не можете использовать операторы типа

row.Cells[0].Value = i.ToString();

, если не добавите ячейки вручную в пустую строку.

2 голосов
/ 17 апреля 2013

Моя версия этого:

                OracleCommand cmd = new OracleCommand(commandText, _oraConn);
                OracleDataReader dr = cmd.ExecuteReader();

                int i = 0;
                while (dr.Read())
                {
                    DataGridViewRow row = new DataGridViewRow();
                    row.CreateCells(dataGridView1);


                    row.Cells[0].Value = dr.GetValue(0).ToString();
                    row.Cells[1].Value = dr.GetValue(1).ToString();
                    row.Cells[2].Value = dr.GetValue(2).ToString();
                    row.Cells[3].Value = dr.GetValue(3).ToString();
                    row.Cells[4].Value = dr.GetValue(4).ToString();
                    row.Cells[5].Value = dr.GetValue(5).ToString();

                    dataGridView1.Rows.Add(row);

                    //MessageBox.Show( dr.GetValue("vz_id").ToString());
                    i++;
                };

Спасибо за ваши ответы.

1 голос
/ 25 октября 2012

Простая версия:

dataGridView1.Rows.Add(new object[] { cell0Value, cell1Value });

Мое расширение, которое мне нравится использовать:

static class DataGridViewExtension
{
    public static void AddCustomRow(this DataGridView dgv, object [] values, object tag = null)
    {
        int Index = dgv.Rows.Add(values);

        // Add a tag if one has been specified
        if (tag != null)
        {
            DataGridViewRow row = dgv.Rows[Index];
            row.Tag = tag;
        }
    }

    public static void AddCustomRow(this DataGridView dgv, string text, object tag = null)
    {
        AddCustomRow(dgv, new object[] { text }, tag);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...