none
VS 2008. DataGridView. Как задавать значения уже добавленных пустых строк? RRS feed

  • Вопрос

  • У меня в DataGridView есть 10 пустых строк. Хотел заполнить их данными - не вышло.
    Я пытался так:

    Код C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    void Form1::SaveNode(DataGridViewRow ^row)
    {
        int i = 0;
     
        while(this->dataGridView1->Rows[i]->Cells[0]->Value != "") //1
            i++; // тут должны пропускаться не пустые строки
        this->dataGridView1->Rows[i] = row; //2
    }
    Строка row - заполнена ячейками типа DataGridViewTextBoxCell со значениями.

    //1 - Тут значения ячеек (как я думал) должны быть равны "" такой фигне. Здесь выдаётся ошибка, что индекс выходит за пределы коллекции. Когда я комменчу этот цикл, выскакивает следующее:
    //2 - Необработанное исключение типа "System.NotSupportedException" произошло в System.Windows.Forms.dll
    Дополнительные сведения: Указанный метод не поддерживается.

    Что делать?..
    • Изменено Vendicare 4 июня 2012 г. 7:42

Ответы

Все ответы

  • 1.1 Value, наверно, нужно сравнивать с DbNull.Value
    1.2 При i==0 выскакивает "индекс выходит за пределы коллекции"?
     
    • Помечено в качестве ответа Vendicare 4 июня 2012 г. 12:19
    4 июня 2012 г. 10:23
    Модератор
  • При i==0 выскакивает "индекс выходит за пределы коллекции"?

    При i == 10. Цикл пропускает все пустые строки, хотя должен пропускать все заполненные.

    Ошибка 1 error C2065: DbNull: необъявленный идентификатор

    Ошибка 2 error C2228: выражение слева от ".Value" должно представлять класс, структуру или объединение

    Может это у Вас на другом языке? У меня код C++.

    4 июня 2012 г. 10:44
    • Помечено в качестве ответа Vendicare 4 июня 2012 г. 12:19
    4 июня 2012 г. 10:54
    Модератор
  • Спасибо. Можете теперь помочь со 2-ой ошибкой в этой же функции:

    this->dataGridView1->Rows[i] = row;

    Необработанное исключение типа "System.NotSupportedException" произошло в System.Windows.Forms.dll
    Дополнительные сведения: Указанный метод не поддерживается.

    Это уже при выполнении выскакивает.

    4 июня 2012 г. 11:05
  • Видимо прямое приравнивание не срабатывает.

    Вариантов несколько:

    1. Копировать по колонкам значения;
    2. Удалить строку используя RemoveAt, а потом добавить в ее позицию используя Insert;
    3. Попробовать использовать CopyTo.

    • Помечено в качестве ответа Vendicare 4 июня 2012 г. 12:18
    4 июня 2012 г. 11:52
    Модератор
  • Спасибо большое! Использовал RemoveAt и Insert.

    Блин, сколько же я над этим мучался!

    4 июня 2012 г. 12:21