Laden...

Einträge in DataTable suchen und in zweite Tabelle einfügen

Erstellt von bbth6afi vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.141 Views
B
bbth6afi Themenstarter:in
7 Beiträge seit 2019
vor 4 Jahren
Einträge in DataTable suchen und in zweite Tabelle einfügen

Hallo,
ich habe ein Problem beim Erstellen eines Verwaltungsprogramms, und zwar habe ich 2 DataGridView's
als sichtbare Tabellen und ein DataTable als nicht sichtbare Tabelle.
Nun möchte ich, dass wenn ich bei der einen Tabelle einen Eintrag auswähle, soll in der DataTable
nach einem string-Wert und einem int-Wert gesucht werden.
Wenn ein oder mehrere Einträge in der DataTable gefunden werden dann sollen diese in der anderen
Tabelle eingefügt werden.
Die zu suchen Werte bekomme ich wenn ich eine Zelle der DataGridView angeklickt habe:

string wert_titel = dataGridViewX1.Rows[e.RowIndex].Cells[0].Value.ToString()
string wert_jahr = dataGridViewX1.Rows[e.RowIndex].Cells[7].Value.ToString()

Die DataTable sieht so aus:

DataTable tabelle_fassungen_filme = new DataTable();
tabelle_fassungen_filme.Columns.Add("Titel", typeof(string));
tabelle_fassungen_filme.Columns.Add("Jahr", typeof(int));
tabelle_fassungen_filme.Columns.Add("Land", typeof(string));
tabelle_fassungen_filme.Columns.Add("Gekuerzt", typeof(string));
tabelle_fassungen_filme.Columns.Add("Medium", typeof(string));
tabelle_fassungen_filme.Columns.Add("Verpackung", typeof(string));
tabelle_fassungen_filme.Columns.Add("CovergroesseAendern", typeof(string));
tabelle_fassungen_filme.Columns.Add("GroesseCover", typeof(string));
tabelle_fassungen_filme.Columns.Add("Cover", typeof(string));
tabelle_fassungen_filme.Columns.Add("Freigabe", typeof(string));
tabelle_fassungen_filme.Columns.Add("OVP", typeof(string));
tabelle_fassungen_filme.Columns.Add("Label", typeof(string));
tabelle_fassungen_filme.Columns.Add("Datum", typeof(string));
tabelle_fassungen_filme.Columns.Add("Laufzeit", typeof(string));
tabelle_fassungen_filme.Columns.Add("Discs", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bildformat", typeof(string));
tabelle_fassungen_filme.Columns.Add("Tonformat1", typeof(string));
tabelle_fassungen_filme.Columns.Add("Tonformat2", typeof(string));
tabelle_fassungen_filme.Columns.Add("Tonformat3", typeof(string));
tabelle_fassungen_filme.Columns.Add("Tonformat4", typeof(string));
tabelle_fassungen_filme.Columns.Add("Untertitel", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra1", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra2", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra3", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra4", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra5", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra6", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra7", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra8", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra9", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra10", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra11", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra12", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra13", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra14", typeof(string));
tabelle_fassungen_filme.Columns.Add("Extra15", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung1", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung2", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung3", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung4", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung5", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung6", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung7", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung8", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung9", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung10", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung11", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung12", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung13", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung14", typeof(string));
tabelle_fassungen_filme.Columns.Add("Bemerkung15", typeof(string));
16.834 Beiträge seit 2008
vor 4 Jahren

Der saubere Weg wäre eigentlich, wenn Du eine UI-unabhängige Datenquelle hast
[Artikel] Drei-Schichten-Architektur

Die Datenquelle nimmst Du dann zum Binden an die UI und auch zum Suchen bzw. zusätzlichen Einblenden in anderen Controls.

Sehr einfach geht das auch mit Reactive Extensions.

1.029 Beiträge seit 2010
vor 4 Jahren

Hi,

mal abseits der von Abt angemerkten Sachen:
Ich sehe in deinem Post eine (Teil)Erklärung, was du gerne machen möchtest.
Was ich vermisse: Deine Problembeschreibung 😉

Ein weiteres, wichtiges Stichwort wäre hier: "DataBinding" - auf die Art, die du hier verwendest brichst du dir nur selbst das Genick - Spaß macht das sicher keinen sowas zusammenzuschreibseln...

LG

B
bbth6afi Themenstarter:in
7 Beiträge seit 2019
vor 4 Jahren

Hallo,

habs endlich hinbekommen und so wie ich es brauche funktioniert es, die Funktion fürs Suchen habe
ich in eine eigene Methode geschrieben.

private void dataGridViewX1_CellClick(object sender, DataGridViewCellEventArgs e)
{

      string wert_titel = dataGridViewX1.Rows[e.RowIndex].Cells[0].Value.ToString();
      int wert_jahr = int.Parse(dataGridViewX1.Rows[e.RowIndex].Cells[7].Value.ToString());

      findenFassungFilme(wert_titel, wert_jahr);
}
public void findenFassungFilme(string wert_titel, int wert_jahr)
{
      dataGridView1.Rows.Clear();
      List<string> liste_land = new List<string>();

      for (int i = 0; i < tabelle_fassungen_filme.Rows.Count; i++)
      {
             string titel = tabelle_fassungen_filme.Rows[i][0].ToString();
             int jahr = int.Parse(tabelle_fassungen_filme.Rows[i][1].ToString());

             if (wert_titel.Equals(titel) && wert_jahr == jahr)
             {
                 string land = tabelle_fassungen_filme.Rows[i][2].ToString();
                 string gekuerzt = tabelle_fassungen_filme.Rows[i][3].ToString();
                 Image webImage = new Bitmap("" + gekuerzt);
                 string medium = tabelle_fassungen_filme.Rows[i][4].ToString();
                 string verpackung = tabelle_fassungen_filme.Rows[i][5].ToString();

                 dataGridView1.Rows.Add(i,land, webImage, medium,verpackung);
             }
       }
}
463 Beiträge seit 2009
vor 4 Jahren

Also wenn du schon direkt in DataTables suchst würde ich dir empfehlen zumindest typisierte DataSets/Tables zu verwenden. Ich würde direkt in der Datenbank suchen - aber das nur am Rande.