Forum: PC-Programmierung DataTable C#


von CSharpUser (Gast)


Lesenswert?

Hallo,

in meiner Anwendung benutzt ich ein DataTable. Dieses DataTable wird zur 
Laufzeit befüllt. Das Suchen in der DataTable nach einem bestimmten Wert 
bereitet mir Probleme. Wie kann man herausfinden welcher Wert in welche 
Reihe vorhanden ist. Ich benötige da den Index in welcher Reihe dieser 
Wert existiert.
1
DataTable dt = new DataTable();
2
DataRow row;
3
4
row = dt.NewRow();
5
dt.Columns.Add("Test1", typeof(string));
6
dt.Columns.Add("Test2", typeof(string));
7
dt.Columns.Add("Test3", typeof(string));
8
9
row = dt.NewRow();
10
row["Test1"] = string.Empty;
11
row["Test2"] = strInst;
12
row["Test3"] = string.Empty;
13
dt.Rows.Add(row);

von Markus (Gast)


Lesenswert?

Du kannst auf die Spalten nicht nur über einen numerischen Index 
zugreifen. Der Name als String geht auch: row["spaltenname"].

Grüße
Markus

von CSharpUser (Gast)


Lesenswert?

Zur Laufzeit soll in allen Zellen gesucht werden wo sich ein bestimmter 
Wert befindet. Wenn ein Wert gefunden wurde dann soll der index sprich 
die Nummer von der Reihe ausgegeben werden.

von CSharpUser (Gast)


Lesenswert?

[code}
"Test1"   "Test2"  "Test3"
xy1       xy2      xy3        <-- Reihe 1 (Index 0)
xy4       xy5      xy6        <-- Reihe 2 (Index 1)

Suche nach "xy5" --> als Index soll dann 1 stehen. Dies entspricht der 
zweiten Reihe
[/code]

von CSharpUser (Gast)


Lesenswert?

1
"Test1"   "Test2"  "Test3"
2
xy1       xy2      xy3        <-- Reihe 1 (Index 0)
3
xy4       xy5      xy6        <-- Reihe 2 (Index 1)
4
5
Suche nach "xy5" --> als Index soll dann 1 stehen. Dies entspricht der 
6
zweiten Reihe

von CSharpUser (Gast)


Lesenswert?

Im Netz habe ich alles mögliche durchsucht. Das kann doch nicht sein, 
dass man sowas nich realisieren kann.

von der mechatroniker (Gast)


Lesenswert?

Im Zweifelsfall die Zeilen und Spalten mit zwei verschachtelten 
for-Schleifen durchsuchen. Mit Linq bekommt man das vom Sourcecode 
eleganter hin. Schneller wirds damit aber nicht.

von c#ler (Gast)


Lesenswert?

weil mir gerade langweilig war..

1
DataTable dt = new DataTable();
2
DataRow row,row2;
3
4
row = dt.NewRow();
5
dt.Columns.Add("Test1", typeof(string));
6
dt.Columns.Add("Test2", typeof(string));
7
dt.Columns.Add("Test3", typeof(string));
8
9
row = dt.NewRow();
10
row["Test1"] = "xy1";
11
row["Test2"] = "xy2";
12
row["Test3"] = "xy3";
13
dt.Rows.Add(row);
14
15
row2 = dt.NewRow();
16
row2["Test1"] = "xy4";
17
row2["Test2"] = "xy5";
18
row2["Test3"] = "xy6";
19
dt.Rows.Add(row2);
20
21
string SuchDingens = "xy5";
22
23
bool gefunden = false;
24
for (int i = 0; i < dt.Rows.Count; i++)
25
{
26
   for (int j = 0; j < dt.Columns.Count; j++)
27
   {
28
      if (dt.Rows[i][j].ToString() == SuchDingens)
29
      {
30
         MessageBox.Show("Das erste! Ding habe ich in der Zeile " + (i + 1) + " mit dem Index " + i.ToString() + " in der Spalte " + (j + 1) + " mit dem Index " + j + " gefunden.");
31
         gefunden = true;
32
         break;
33
      }
34
   }
35
   if(gefunden)
36
   {
37
      break;
38
   }
39
}

und wie immer: Viele Wege führen nach Rom!

von Freddy Frettchen (Gast)


Lesenswert?

Alternative mit ItemArray:
1
int Find(DataTable table, string value)
2
{
3
  for (int rowIdx = 0; rowIdx < table.Rows.Count; rowIdx++)
4
  {
5
    var fresult = Array.Find(table.Rows[rowIdx].ItemArray, item => Equals(value, item));
6
    if (fresult != null) return rowIdx;
7
  }
8
  return -1;
9
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.