Entwickler-Ecke

WinForms - DataGridView mit DataTable verbinden


ottto - Fr 19.07.19 15:13
Titel: DataGridView mit DataTable verbinden
Hallo,
ich bin gerade dabei mich mit der DataGridView anzufreunden.
Hab dabei aber noch ein Verständnisproblem.
Zur DGV(DgvSP) hab ich mir eine DataTable(dt) erstellt und diese auch per "DgvSP.DataSource = dt;" verbunden.
Die enthaltenen Daten werden in der DGV auch angezeigt.
Wenn ich die Inhalte auswerten möchte, bekomme ich die ZeilenZahl der DgvSP richtig angezeigt. Zur dt ist die ZeilenZahl aber 0.
Hab ich grundsätzlich einen Denkfehler? Die dt und auch die DgvSP nutzen doch die gleiche Datenbasis...


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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
        public Form1()
        {
            InitializeComponent();
 
        }
        DataTable dt = new DataTable("Person");

        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable("Person");
            dt.Columns.Add("Name", System.Type.GetType("System.String"));
            dt.Columns.Add("Vorname", System.Type.GetType("System.String"));
            dt.Columns.Add("PersNr", System.Type.GetType("System.Int32"));
            dt.Columns.Add("GebDat", System.Type.GetType("System.DateTime"));
            
            dt.Columns["Name"].AllowDBNull = false//Spalte muss gefüllt sein.
            dt.Columns["PersNr"].Unique = true//Inhalt darf nicht doppelt sein
            dt.Columns["PersNr"].AllowDBNull = false;

            dt.Rows.Add("Meier""Inge"123new DateTime(19990202));
            dt.Rows.Add("Müller""Inge"124new DateTime(19990202));
            dt.Rows.Add("Schulze""Inge"125new DateTime(19990202));
            DgvSP.DataSource = dt;
            
        }
        private void ButAnzeige_Click(object sender, EventArgs e)
        {
            LbLAnzeige.Text += "\n+++dt.Rows.Count+++" + dt.Rows.Count;
            LbLAnzeige.Text += "\n+++DgvSP.Rows.Count+++" + DgvSP.Rows.Count;

            //for (int i = 0; i < (dt.Rows.Count - 1); i++)
            //{
            //    LbLAnzeige.Text += dt.Rows[i]["Name"].ToString();
            //}

        }


Ausgabe:

Quelltext
1:
2:
LbLAnzeige.Text += "\n+++dt.Rows.Count+++" + dt.Rows.Count; = 0
LbLAnzeige.Text += "\n+++DgvSP.Rows.Count+++" + DgvSP.Rows.Count; = 4

Danke.
Gruß.
ottto

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Code-Tags hinzugefügt


Th69 - Fr 19.07.19 15:36

Stichwort: Lokale vs. Membervariable

Du hast mit

C#-Quelltext
1:
DataTable dt = new DataTable("Person");                    

eine neue lokale Variable erzeugt anstatt die vorhandene Membervariable zu benutzen.
->

C#-Quelltext
1:
dt = new DataTable("Person");                    

(oder die Zeile ganz löschen, da du ja schon diese mit der Membervariablen erzeugt hast)