У меня есть datagridview
и база данных SQLite. У datagrid может быть любое количество строк и любое количество столбцов.
Мне нужно сохранить этот datagrid в базу данных SQLite, чтобы иметь возможность повторно заполнять его точно так же, как во второй момент. Я знаю, как создавать таблицы, заполнять таблицы и т.д., Поэтому это не вопрос о том, как это сделать. то, что мне нужно знать, - это лучший способ сделать это. он должен быть быстрым и надежным, и его можно будет обновить.
Любой sugestion?
благодаря
Это немного зависит от того, как вы заполняете DataGridView.
Предложение -1-
Вы привязываете свой "Автомобиль как список (автомобиль)" к DataGridView. Теперь вы можете просматривать объекты с отражением и даже создавать таблицу с этим (код untested, database.executeQuery() - это просто место для вашей функции выполнения базы данных):
database.exeuteQuery("CREATE TABLE car")
for each pi as PropertyInfo in GetType(Car).getProperties()
database.executeQuery("ALTER TABLE car ADD COLUMN " & pi.name & " TEXT(255)")
next for
for each car as Car in Cars
Dim insert As String = ""
Dim values as String = ""
for each pi as PropertyInfo in car.getType().getProperties()
if insert <> "" then
insert &= ", "
values &= ", "
end if
insert &= pi.name
values &= pi.getValue(car, nothing)
next for
database.executeQuery("INSERT INTO car (" & insert & ") VALUES (" & values & ")")
next for
Предложение -2-
Вы храните пары имя-значение в базе данных. Если ваша сетка "маленькая" (100000 <строк *), это достаточно быстро и обладает большой гибкостью, не меняя структуру базы данных.
For Each row as DataGridViewRow in MyDataGridView.Rows
For Each col as DataGridViewColumn in MyDataGridView.Columns
database.executeQuery("INSERT INFO dgvContent( RowId, Name, Value ) VALUES ( " & row.Index & ", '" & col.Name & "', '" & row.Cells(col).Value & "' ")
Next For
Next For
Чтобы получить и обновить данные, вы можете использовать RowId, чтобы получить значения одной строки вместе.
Предложение -3-
Это комбинация предложений 2 и 1. Вы создаете столбцы DataGridView в своей базе данных и имеете DataGridView точно так же в своей базе данных. Это более гибко, чем предложение -1-, поскольку вы не можете изменять свойства объекта "на лету", но гораздо больше хлопот, чем предложение -2-, поскольку вам нужно создавать, удалять и упорядочивать структуру таблицы. Реальный статистический анализ возможен с предложением -3-, но поскольку структура таблицы не является статичной, ее очень сложно реализовать. (Нет кода для этого примера. Просто скомбинируйте код предложения 2 с кодом предложения 1)
Вывод
Я думаю, что нет лучшего способа сохранить DataGridView с ЛЮБЫМИ строками и ЛЮБЫМИ столбцами. Все зависит от ситуации. Иногда я бы использовал предложение -2-, так как он кодируется, а структура базы данных статична. Иногда я бы использовал Suggestion -3-, поскольку он может обрабатывать больше данных и писать запросы против него, что кажется более естественным. Но здесь структура базы данных сильно меняется. Изменения требуют времени
Дальше по дороге
В немногих более крупных приложениях я никогда не заполняю данные непосредственно из DataGridView в базу данных. Я всегда использую один слой абстракции (модельный слой, например ORM) между ними. Я думаю, что это имеет следующие преимущества: 1. Вы можете использовать свои подпрограммы базы данных более гибкими для большего, чем только один DataGridView. (Я действительно реалистично дублирую код дублирования). 2. Вы можете сделать изменения более легко: если DataGridView изменится, вам не нужно думать о базе данных, только ваш уровень абстракции легкого. Если ваша база данных меняется, вам не нужно жестко смотреть. 3. Логика данных не является частью представления, логика данных переходит к уровню модели.