2017-03-20 4 views
2

Ich konvertiere derzeit Code, der Daten in einer XML-Datei speichert, um sie stattdessen in einer SQLite-Datenbank zu speichern. Die Datenbank verfügt über eine einzelne Tabelle mit 4 Spalten:Verwenden einer Liste, die von einer SQLite-Abfrage in einer Foreach-Anweisung abgerufen wird

thumbnail | title | threadid | url

Alle Einträge in der Datenbank Strings sind. Mit meinem alten Code extrahiere ich alle Daten aus einer XML-Datei und befülle ein Datagrid mit den Werten. Mein Ziel ist, genau das zu tun, aber Daten aus der SQLite-Datenbank zu verwenden. Ich kann erfolgreich alle Daten aus der Datenbanktabelle extrahieren wie so:

public List<Database> getFromTable() 
{ 
    List<Database> items = new List<Database>(); 
    string sql = "SELECT * FROM blacklist"; 
    SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); 
    using (SQLiteDataReader reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      var item = new Database(); 
      item.imgstring = (string)reader["thumbnail"]; 
      item.titlestring = (string)reader["title"]; 
      item.threadidstring = (string)reader["threadid"]; 
      item.urlstring = (string)reader["url"]; 

      items.Add(item); 
     } 
    } 

    return items; 
} 

Der Teil I nun an bin stecken, wie die Ergebnisse in der Liste zurückgegeben verwenden. Derzeit bin Aufruf ich die Methode wie folgt:

var items = database.getFromTable();

jedoch nach der verpassten einige Beispiele zu finden, kann ich nicht herausfinden, wie die foreach Linie zusammen, um die Elemente in der zurückgegebenen Liste verwenden zu setzen. Z.B;

foreach (??? in items) 
{ 
    // Populate line in datagrid with thumbnail, title, threadid, url 
} 

ich das Datagrid bevölkert bekommen kann, ist es einfach zu verstehen, wie meine ‚Elemente‘ zum Zusammenbruch in eine nutzbare Form. Alle Hinweise geschätzt.

Bearbeiten Ich werde diese Informationen in ein Datengrid hinzufügen, so dass jeder Zellenwert aus der SQLite-Tabelle in eine entsprechende Zelle auf dem Datengitter eingefügt wird.

Edit 2 Es ist erwähnenswert, dass während thumbnail von meiner SQLite-Datenbank ein String-Wert ist, ist es eigentlich ein Bild, das zu einem Base64ImageRepresentation umgewandelt worden ist, so kann ich es als String-Wert speichern. Ein Teil des Erhaltens jedes Wertes aus der SQLite-Datenbank ist so, dass ich diese Zeichenkette zurück in ein Bild konvertieren kann, bevor ich sie in meine DataGridView einfüge.

+0

Wo wird 'm_dbConnection' deklariert? Sieht so aus, als ob du deine Verbindung nicht richtig entsorgst. Es muss auch in eine using-Anweisung eingebunden werden. – mason

+0

Es ist in der gleichen Klasse wie 'öffentliche Liste getFromTable()'. Ich werde das angesprochen bekommen. – Rawns

+0

Was genau ist Ihr Ziel? Sie möchten die Werte in der 'List Elemente 'in einem' DataGridView' anzeigen? "Teile meine 'Gegenstände' in eine brauchbare Form" was genau meinst du mit "benutzbarer" Form? –

Antwort

1

Es wäre einfacher, auf die benutzerdefinierten Objekte zu verzichten, und lesen Sie stattdessen einfach DataTable und verwenden Sie es als Quelle für die DataGridView direkt.

Wenn Sie die benutzerdefinierten Objekte verwenden müssen, müssen Sie sie überstreichen, Zeilen aus der Datenquelle des Rasters erstellen und die Zeilen einzeln ausfüllen und nach dem Auffüllen wieder hinzufügen.

Etwas wie folgt aus:

foreach (var item in getFromTable()) 
{ 
    var index = grid.Rows.Add(); 
    var row = grid.Rows[index]; 
    row.SetValues(item.imgstring, item.titlestring, item.threadidstring, item.urlstring); //order of the items must match field order in grid 
} 

Dennoch würde ich für die Option entscheiden, um eine solide Datenquelle zu binden. Aber das sollte dir die allgemeine Idee geben.

+0

Vielen Dank für die Hinweise, ich werde es versuchen! :) – Rawns

+1

Danke nochmal! Das ist der Job, danke! :) – Rawns

Verwandte Themen