Autor Beitrag
m-s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Do 10.03.11 19:36 
Ich habe eine Datenbank-Tabelle über einen Tableadapter aufgerufen und gefiltert, so das es nur eine Zeile gibt.
In dieser Zeile der Tabelle möchte ich auf ein Feld zugreifen und den Wert auslesen.

Geht das irgendwie direkt, ich finde nichts?

Gruß Markus
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 10.03.11 19:51 
Hallo Markus,

was meinst Du mit "direkt"? Also, wenn Du eine DataTable über einen TableAdapter füllst sind ja dort n Rows drin. Gut, in Deinem Fall nur eine. Aber das ist egal. Um nun an die eine besagte Row zu gelangen könntest Du sie einfach per Linq holen und auf die Properties zugreifen:
ausblenden C#-Quelltext
1:
2:
3:
DataSet.Table_1DataTable table = new DataSet.Table_1DataTable();
new Table_1TableAdapter().Fill(table);
var row = table.FirstOrDefault();
LG, Marko
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Do 10.03.11 23:24 
Hallo Marko,

erst mal danke für die Antwort.
Leider komme ich da gar nicht mit, ist einfach noch zu hoch für mich.

Ich habe nen paar TableAdapter und die entsprechenden Bindingsources, mache also eigentlich gar nichts manuell mit der Datenbank.

Prinzipiell geht es mir darum aus einer der verbundenen Tabellen einen Wert abzufragen um daraufhin das Form zu manipulieren. Also ist der Wert in Feld X so oder so, dann mache eine Textbox dicht. So in der Art.

Ich lese also aus dem aktuellen Form, aus einer verbundenen ComboBox eine ID, diese übergebe ich an eine Abfrage und reduziere so auf einen Datensatz. Nun weiß ich das im Feld "lifetime" in der 3. Spalte, erste und einzige Reihe der Tabelle ein Wert true oder false ist.

Ich würde also gerne ne If Abfrage machen, aber ich weiß nicht wie ich den Wert aus der Tabelle lese. Ich hatte die Hoffnung das ich den Wert dort wie eine Variable handhaben kann, nachdem ich ja die aktuell vorhandenen Daten schon eingegrenzt habe.

Also sowas wie:

if (this.tableadapterprodukt.lifetime.Value == true)

usw.


Gruß Markus


Zuletzt bearbeitet von m-s am Sa 12.03.11 11:48, insgesamt 1-mal bearbeitet
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Sa 12.03.11 11:47 
Hat keiner Lust sich auf mein Niveau herab zu lassen ? :)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 12.03.11 13:37 
Hi,

wenn dir Linq nicht zusagt, dann kanst du auch normal mittels 'dataTable.Rows' auf die einzelnen Zeilen zugreifen, d.h.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if (dataTable.Rows.Count > 0)
{
  DataRow row = dataTable.Rows[0]; // erste Zeile

  bool lifetime = (bool)row["lifetime"];
  if (lifetime)
  {

  }
}

Je nach Datentyp der Spalte (bool, int, string, ...) mußt du dann entsprechend casten.

Für diesen Beitrag haben gedankt: m-s
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Sa 12.03.11 14:53 
Hi Th69,

danke, nach ner Weile verständnislosem Probieren habe ich dann verstanden wie es geht. Bei mir hieß das dann:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
                DataRow zeile = antiviruslizenzDataSet.produkt.Rows[0];                

                    bool lifetime = (bool)zeile["lifetime"];
                    if (lifetime)
                    {
                        MessageBox.Show("LifeTime ist " + lifetime.ToString());
                    }

Dabei habe ich dann gleich festgestellt das ich einem falschen Ansatz gefolgt war :)
Ich habe das jetzt umgeschrieben, obs so wirklich sinnvoll ist weiß ich nicht aber es funktioniert:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
            if (produktComboBox.SelectedIndex != -1)
            {
                if (antiviruslizenzDataSet.produkt.Count > 0)
                {
                    for (int i = 0; i < antiviruslizenzDataSet.produkt.Count; i++)
                    {
                        DataRow zeile = antiviruslizenzDataSet.produkt.Rows[i];
                        int id = (int)zeile["ID"];
                        if (id == Convert.ToInt32(produktComboBox.SelectedValue.ToString()))
                        {
                            bool lifetime = (bool)zeile["lifetime"];
                            if (lifetime)
                            {
                                laeuftabDateTimePicker.Enabled = false;
                                erinnerungDateTimePicker.Enabled = false;
                                erinnernCheckBox.Enabled = false;
                            }
                            else
                            {
                                laeuftabDateTimePicker.Enabled = true;
                                erinnerungDateTimePicker.Enabled = true;
                                erinnernCheckBox.Enabled = true;
                            }
                        }
                    }    
                }            
            }
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 12.03.11 15:17 
Schön, daß es jetzt bei dir funktioniert.

Ein kleiner Tipp noch:
gerade für boolsche Werte kann man deinen Code (anstatt dem if-else) auch so verkürzen:
ausblenden C#-Quelltext
1:
2:
3:
laeuftabDateTimePicker.Enabled = !lifetime;
erinnerungDateTimePicker.Enabled = !lifetime;
erinnernCheckBox.Enabled = !lifetime;

Für diesen Beitrag haben gedankt: m-s
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Sa 12.03.11 18:49 
Entweder kannte ich es noch nicht oder ich hatte es wieder vergessen :)
Danke hab's entsprechend verkürzt.