fheyn Ответов: 1

Как заполнить datagridview источником данных


привет,
У меня есть datagridview, привязанный к таблице базы данных. dgv показывает данные элемента,
где предмет может быть всем.
при добавлении нового элемента источник данных dgv имеет 0 строк, dgv просто показывает столбцы (правильно).
чтобы добавить данные к элементу, я использую
Item_CellMouseDown
чтобы добавить идентификатор элементов
к новой строке, потому что столбец id не виден в dgv.

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

код а :
private void Item_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    int row = e.RowIndex;

    DataRow dr;
    if (row == SourceTable.Rows.Count) {
       dr = SourceTable.NewRow();
       SourceTable.Rows.Add(dr);

       dr["ID"] = this.ID;
    }
}

код B :
private void Item_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    int row = e.RowIndex;

    object  id = Item["Id",row].Value;
    if (id == null || id.ToString() == string.Empty) {
       Item["Id",row].Value = this.ID;
    }
}


Что я уже пробовал:

код а : элемент показывает три строки, SourceTable имеет две строки

код B : элемент показывает одну строку, SourceTable имеет 0 строк

однако это должно быть элемент показывает две строки, SourceTable имеет 1 строку

что я упускаю или что я здесь делаю не так ?

заранее спасибо
Франц

RickZeeland

И как именно вы определяете SourceTable и Item ?

j snooze

вы повторно привязываете свою сетку данных к источнику данных после добавления строки?

fheyn

@RickZeeland
частный недействительными DataGridLayout()
{
Item.DataSource = SourceTable;
Предмет.Столбцы["ID"].Visible = false;
}

DataTable SourceTable { get { return(Database.Объект DataTable(Имя); }}

Элемент-это dgvcontrol внутри mdichild frmItem. Каждая форма представляет одно
конкретный предмет (например, человек, автомобиль, улица...)
База данных-это класс, который включает в себя sqlserver и sqlite. (этот проект использует sqlite). Datatable - это таблица базового адаптера таблиц.

RickZeeland

Возможно, вам следует установить свойство dataGridView AllowUserToAddRows = false
https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.allowusertoaddrows(v=vs. 110).aspx
Также я хотел перенести SourceTable.Строк.Добавить(д-р); к нижней части, если заявление.

fheyn

прежде всего большое спасибо за ваш ответ
когда набор AllowUserToAddRows = false, dgv появляется пустым, и я вообще не могу добавлять данные (не так, как я хочу)
тем временем Я заменил таблицу базы данных локальной таблицей, которая содержит только столбец id (видимый здесь).
Я щелкаю по ячейке и получаю тот же результат : dgv показывает три строки с идентификатором в первой строке.

RickZeeland

И когда вы устанавливаете точку останова, сколько раз она попадает, когда вы щелкаете мышью ?

1 Ответов

Рейтинг:
7

fheyn

Я просто не могу провести остаток этого года пытаясь выяснить что случилось поэтому я добавил

if (Item.Rows.Count > SourceTable.Rows.Count+1)
     Item.Rows.RemoveAt(1);

в конце, если заявление

с этим он работает правильно !
(на самом деле RemoveAt делается только тогда, когда таблица была пуста)