SQLite数据适配器不显示数据

时间:2017-08-04 23:38:08

标签: c# sqlite

我正在尝试在我的Windows窗体应用程序中填充数据网格视图,但是当我执行select查询时,没有从数据库返回任何内容。我在本网站上查看了有关此主题的其他问题,但无法找到解决我问题的任何问题。

数据视图表的名称是qbcMemDataView,数据源是一个名为sqlite_dbDataSet1的sqlite数据集

以下是我的代码:

public Form1()
{
    InitializeComponent();

    dbConnection = new SQLiteConnection("Data Source=sqlite_db.sqlite;Version=3");

    dbConnection.Open();

    string[] restrictions = new string[4];

    restrictions[2] = "test_table_mom";

    using (DataTable dTbl = dbConnection.GetSchema("Tables", restrictions))
    {
        for (int i = 0; i < dTbl.Rows.Count; i++)
        {
            tblChooser.Items.Add(dTbl.Rows[i].ItemArray[dTbl.Columns.IndexOf("TABLE_NAME")].ToString());
        }

        if (tblChooser.Items.Count > 0)
        {
            tblChooser.SelectedIndex = 0;
        }
    }  
}

private void btnSelect_tbl_Click(object sender, EventArgs e)
{

    string sql = "SELECT id, name FROM test_table_mom";

    using (SQLiteDataAdapter dbAdapter = new SQLiteDataAdapter(sql, dbConnection))
    {
        DataTable dataTbl = new DataTable();

        dbAdapter.Fill(dataTbl);

        qbcMemDataView.DataSource = dataTbl;
    }
}

此外,这是运行程序的屏幕截图,可能有助于更好地解释我遇到的问题:http://imgur.com/j9ffeVi

我知道表中有数据,我只是不知道为什么它在执行btnSelect_tbl_Click方法时没有出现在数据网格中。

任何帮助都将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:7)

根据教程How to: Bind Data to the Windows Forms DataGridView Control,您缺少一个BindingSource组件,它将数据源中的数据绑定到您的表到DataGrid。

在类的顶部初始化BindingSource,如下所示:

private BindingSource bindingSource1 = new BindingSource();

然后在按钮顶部附近单击方法,然后在sql中添加以下行:

qbcMemDataView.DataSource = bindingSource1;

最后改变最后一行代码

qbcMemDataView.DataSource = dataTbl;

bindingSource1.DataSource = dataTbl;

尝试一下,看看它是否适合你。

答案 1 :(得分:3)

注意:我不确定这是否适用于c#,但也许是普遍修复。

Android内置适配器等使用_id作为id字段的名称。另一个问题是_id和id,它在android中没有很好的记录。

About "_id" field in Android SQLite

您可以在select中使用此技术重命名,但它会变得混乱,您可能无法捕获所有事件。

string sql = "SELECT id _id, name FROM test_table_mom";

我的观点:返回并将您的数据库ID重构为_id。