datatable.GetChanges () показывает всегда первую строку DataGridView - PullRequest
0 голосов
/ 13 января 2011

У меня есть DataGridView с Binding-Source, связанным с таблицей данных, загруженной из Oracle-Database. (кстати. Я не думаю, что соединение с базой данных могло бы вызвать это)

У меня также есть DataGridViewComboBoxColumn, привязанный к классу лиц (только «имеет» ID и имя), поэтому я могу отображать / разрешать редактировать имя вместо ID. Моя проблема сейчас в том, что после завершения привязки данных c # автоматически «выбирает» первую ячейку DGV - см. Прикрепленное изображение.

alt text

Я также должен использовать этот маленький кусочек кода для обеспечения целостности данных:

    private void _table_ColumnChanging(object sender, DataColumnChangeEventArgs e)
    {
        if (e.Column == _table.Columns["NEEDED_ID"])
        {
            if (e.ProposedValue == null)
            {
                e.ProposedValue = System.DBNull.Value;
            }
        }
    }

Теперь использование этой _table.GetChanges () всегда возвращает первую строку DGV как «измененную», но значение на самом деле не изменяется - это всего лишь DBNull вместо null. Можно ли как-то избежать автоматического выбора первой ячейки или как избежать этого поведения?

РЕДАКТИРОВАТЬ: Тем временем я обнаружил, что изменение первого столбца на что-то не редактируемое устраняет эту проблему. Но это не более чем обходной путь. Я был бы очень признателен, чтобы получить рабочее решение для этого.

РЕДАКТИРОВАТЬ 2: У меня также есть пустой объект "сверху" ComboBox-DataSource

  DtoPerson blankPerson = new DtoPerson();
  blankPerson.Name = String.Empty;
  blankPerson.PersonRollenId = -1;
  personList.Add(blankPerson);

Ответы [ 2 ]

0 голосов
/ 21 января 2011

Попробуйте поставить нуль в DataSource вашего DataGridViewComboBoxColumn. Пример:

SELECT id, description
FROM yourTable
UNION
SELECT NULL, NULL
0 голосов
/ 13 января 2011
GridViewName.ClearSelection();
...