2017-08-04 24 views
12

Próbuję wypełnić widok siatki danych w mojej aplikacji formularza systemu Windows, ale nic nie jest zwracana z bazy danych, gdy wykonuję kwerendę wyboru. Przejrzałem inne pytania dotyczące tego tematu na tej stronie, ale nie mogę znaleźć niczego, co rozwiązałoby mój problem.SQLite Data Adapter nie wyświetla danych

Nazwa tabeli widok danych jest qbcMemDataView a źródłem danych jest SQLite zbiór danych o nazwie sqlite_dbDataSet1

Oto kod mam na swoim miejscu:

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; 
    } 
} 

Również tutaj znajduje się zrzut ekranu działający program, który może pomóc lepiej wyjaśnić problem, który mam: http://imgur.com/j9ffeVi

Wiem, że są dane wewnątrz tabeli, po prostu nie wiem, dlaczego nie pojawia się w siatce danych, gdy btnSelect_tbl_Click metho d jest wykonywane.

Każda pomoc zostanie doceniona.

Dzięki!

Odpowiedz

7

Na samouczek How to: Bind Data to the Windows Forms DataGridView Control brakuje składnika BindingSource, który wiąże dane ze źródła danych z tabelą do obiektu DataGrid.

Inicjalizować BindingSource na szczycie swojej klasy tak:

private BindingSource bindingSource1 = new BindingSource(); 

Następnie w górnej części swojej przycisk metody click przed sql dodać linię:

qbcMemDataView.DataSource = bindingSource1; 

i wreszcie zmianę Ostatnia linia kodu

qbcMemDataView.DataSource = dataTbl; 

do

bindingSource1.DataSource = dataTbl; 

wypróbuj i sprawdź, czy to działa.

+0

działa idealnie! Dzięki :) – user2101411

+0

serdecznie zapraszamy! – Taterhead

3

Uwaga: Nie jestem pewien, czy dotyczy to C#, ale może jest to uniwersalna poprawka.

Android wbudowane adaptery i takie użycie _id jak nazwa pola id. Innym problemem jest _id i id dobrze, nie jest dobrze udokumentowane w Androidzie.

About "_id" field in Android SQLite

Można użyć tej metody zmiany nazwy w select ale robi się bałagan i nie może złapać wszystkie wystąpienia.

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

Moja opinia: Wróć i byłaby swój identyfikator db do _id.