2017-05-16 3 views
0

Est-il possible de définir le résultat de la requête directement sur DataGrid (sans mappage à l'objet). J'ai quelques rapports dynamiques et je veux seulement l'afficher dans la grille, sans placer les colonnes, etc.Définir le résultat de la requête à DataGrid ou ListView par SQLite.NET

problème Habituellement it'not parce que je « cartographié » mes données à un objet dans le modèle par exemple:

using (var db = new SQLiteConnection(new SQLite.Net.Platform.Generic.SQLitePlatformGeneric(), "zakupy.db")) 
{ 
    listPerson = db.Table<Persons>().Where(x => x.Property == "P" && x.Status == 0).ToList(); 
} 
lstPersons.DataContext = listPerson; 
+0

ensemble 'ItemsSource' propriété de dataGrid (' lstPersons.ItemsSource = listPerson; ') – ASh

+0

oui, mais dans cet exemple 'listPerson' est la liste des objets 'Persons'. Je ne sais pas comment je peux lier simplement qyery, par exemple "select * from Events" Est-il possible sans 'mapping' de faire un objet? – user3688227

+0

si vous avez une requête sql générique (similaire à '" select * from Events "') puis charger les résultats dans un 'DataTable' et définir 'lstPersons.ItemsSource = myDataTableInstance.DefaultView;' – ASh

Répondre

0

Vous devez mapper les résultats de la requête « select * from événements » dans un IEnumerable en quelque sorte . Vous pouvez bien sûr utiliser un SQLiteDataReader et ajouter des objets anonymes au ItemsSource. Quelque chose comme ceci:

System.Collections.ArrayList list = new System.Collections.ArrayList(); 
using (var db = new SQLiteConnection(new SQLite.Net.Platform.Generic.SQLitePlatformGeneric(), "zakupy.db")) 
{ 
    db.Open(); 
    const string sql = "select * from Events"; 
    SQLiteCommand command = new SQLiteCommand(sql, db); 
    SQLiteDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
     list.Add(new { Name = reader["name"].ToString() }); 
} 
lstPersons.ItemsSource = list; 

Je ne vois vraiment pas pourquoi vous voulez faire cela au lieu de se lier à un IEnumerable<T> générique bien.

De toute façon, vous pouvez définir ou lier le ItemsSource d'un DataGrid ou ListView à IEnumerable. Peu importe comment vous choisissez de peupler cette séquence en ce qui concerne le contrôle.

+0

Oui, mais dans votre exemple, je dois encore spécifier quelques colonnes comme ici: list.Add (nouveau {** Name = lecteur ["name"]. ToString() **}); ou est-ce que je me trompe? – user3688227

+0

Oui, vous devez créer les objets réels et définir les propriétés d'une manière ou d'une autre – mm8

+0

J'ai ajouté ma solution – user3688227

0

Ok, donc voici comment je figure it out:

string ConString = "sale.db"; 
string passedquery = "select * from Events"; 
     DataTable dt = new DataTable(); 
     using (SQLiteConnection con = new SQLiteConnection(ConString)) 
     { 
      try 
      { 
       using (var statement = con.Prepare(passedquery)) 
       { 
        for (int i = 0; i < statement.ColumnCount; i++) 
        { 
         dt.Columns.Add(statement.ColumnName(i)); 
        } 
        while (statement.Step() == SQLiteResult.ROW) 
        { 

         DataRow dr; 
         dr = dt.NewRow(); 

         for (int i = 0; i < statement.ColumnCount; i++) 
         { 
          dr[i] = statement[i]; 
         } 
         dt.Rows.Add(dr); 
        } 
       } 
      } 

      catch(SQLitePCL.SQLiteException) 
      { 

       MessageBox.Show("Nieprawidłowe zapytanie"); 
      }    
     } 
     dtgCustomReport.DataContext = dt.DefaultView; 

Mais je ne sais toujours pas si cette manière simpliest :)