在数据库中保存datagridview的最佳方法

时间:2013-08-03 14:04:43

标签: vb.net sqlite datagridview export

我有一个datagridview和一个SQLite数据库。数据网格可以包含任意数量的行和任意数量的列。

我需要将此数据网格保存到SQLite数据库,以便能够在第二时刻以完全相同的方式重新填充它。我知道如何创建表,填充表等,所以这不是一个如何做到这一点的问题。我需要知道的是最好的方法是做什么。它必须快速可靠,并且必须能够更新。

任何消化?

由于

1 个答案:

答案 0 :(得分:3)

这取决于你如何填充DataGridView。

  1. 如果使用DataSource和对象列表,则可以在数据库中存储特性。大写字母“ANY”代表我,这不是你的解决方案,但我补充说它是完整的。
  2. 如果直接填充网格(items.add),则可以将值存储为数据库中的名称 - 值对
  3. 如果直接填写网格并且不喜欢(2),则可以在数据库中创建与数据网格视图对应的列。
  4. 建议-1 -

    将“汽车列表(汽车)列表”绑定到DataGridView。现在你可以使用反射来运行对象,甚至用这个创建表(代码未经测试,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&lt; row * colums),这足够快,并且具有很大的灵活性,而无需更改数据库结构。

    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在数据库中具有完全相同的方式。这比Suggestion -1-更灵活,因为您无法“动态”更改对象的属性,但是由于您必须创建,删除和组织表结构,因此需要更多麻烦。建议-3-可以进行真正的统计分析,但由于表结构不是静态的,因此很难实现。 (此示例没有代码。只需将Suggestion 2代码与Suggestion 1代码结合使用)

    结论

    我认为没有最好的方法来保存带有任何行和任何列的DataGridView。这一切都取决于具体情况。有时我会使用Suggestion -2-,因为它是代码,数据库结构是静态的。有时候我会使用Suggestion -3-,因为它可以处理更多的数据并且编写查询对它感觉更自然。但是这里的数据库结构发生了很大变化。这些变化需要时间

    进一步在路上

    在更大的应用程序中,我永远不会将数据直接从DataGridView填充到数据库中。我总是在它们之间使用一个抽象层(模型层,如ORM)。我认为这有以下优点:  1.您可以更灵活地使用数据库例程,而不仅仅是这一个DataGridView。 (我真的很想以任何方式讨厌代码重复。)  2.您可以更轻松地进行更改:如果DataGridView发生更改,您不必考虑数据库,只需考虑轻量级抽象层。如果您的数据库发生了变化,您就不必强硬了。  3.数据逻辑不是视图的一部分,数据逻辑转到模型层。