Подтвердить что ты не робот

Адаптер данных SQLite не отображает данные

Я пытаюсь заполнить представление сетки данных в моем приложении формы Windows, но ничего не возвращается из базы данных при выполнении запроса select. Я просмотрел другие вопросы по этой теме на этом сайте, но не могу найти ничего, что могло бы решить мою проблему.

Имя таблицы представлений данных - qbcMemDataView, а источником данных является набор данных sqlite, называемый sqlite_dbDataSet1

Вот код, который у меня есть:

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.

Любая помощь будет оценена.

Спасибо!

4b9b3361

Ответ 1

В учебнике Как: привязать данные к элементу управления DataGridView Windows Forms, вам не хватает BindingSource, который связывает данные из источника данных с вашей таблицей в DataGrid.

Инициализируйте BindingSource в верхней части своего класса следующим образом:

private BindingSource bindingSource1 = new BindingSource();

Затем в верхней части кнопки нажмите кнопку мыши, прежде чем sql добавьте строку:

qbcMemDataView.DataSource = bindingSource1;

и, наконец, измените последнюю строку кода

qbcMemDataView.DataSource = dataTbl;

к

bindingSource1.DataSource = dataTbl;

попробуйте это и посмотрите, работает ли оно для вас.

Ответ 2

Примечание. Я не уверен, что это относится к С#, но, возможно, это универсальное исправление.

Встроенные адаптеры Android и такие использования _id как имя поля id. Другая проблема - это _id и id, но это хорошо не документировано в android.

О "_id" в Android SQLite

Вы можете использовать эту технику переименования в select, но она становится беспорядочной, и вы не можете поймать все вхождения.

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

Мое мнение: вернитесь и отредактируйте свой id db на _id.