Autor Beitrag
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mo 22.08.11 13:42 
Hallo

Ich füge Zellwerte über den Spaltennamen in meine DataGridView's ein.
Das funktioniert auch bei einer foreach-Schleife tip top.
Bei einer while-Schleife in einer try/catch Anweisung mit Datenbankzugriff habe ich allerdings meine Probleme.

Folgender Code funktioniert:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
DataGridViewRow row;
while (leser.Read())
    {
        row = new DataGridViewRow();
        row.CreateCells(dataGridView1);
        row.Cells[0].Value = "Hallo"// Integerwert wird erkannt
    }

// oder
foreach(DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells["SPALTENNAME"].Value = "Hallo"// Stringwert wird erkannt
    }


Folgender Code funktioniert nicht:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
DataGridViewRow row;
while (leser.Read())
    {
        row = new DataGridViewRow();
        row.CreateCells(dataGridView1);
        row.Cells["SPALTENNAME"].Value = "Hallo"// Stringwert wird nicht erkannt
    }


Warum kann ich in einer foreach-Schleife die Spalte mit einem Stringwert beschreiben und in einer while-Schleife nicht?

Ich muss die Werte über die Spaltennamen vergeben, da die Spalten während der Verarbeitung verschoben werden.

Danke für eure Tips.

Gruss
mats74
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Mo 22.08.11 13:48 
probiere mal folgendes
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
while (leser.Read())
    {
DataGridViewRow row;
        row = new DataGridViewRow();
        row.CreateCells(dataGridView1);
        row.Cells["SPALTENNAME"].Value = "Hallo"// Stringwert wird nicht erkannt
    }
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mo 22.08.11 13:55 
Hallo dark-destination1988

Bringt leider nichts.

Folgende Fehlermeldung:
Die Spalte blablabla kann nicht gefunden werden.
Parametername: columnName

Mit Rechtschreibung hat es auch nichts zu tun, da ich den Text schon 1000x (hoffentlich richtig) kopiert habe.

Gruss
mats74
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Mo 22.08.11 14:01 
row=dataGridView1.Rows.NewRow();
am anfang?
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mo 22.08.11 14:14 
... bei mir wird die Methode NewRow() in der Auswahl nicht angezeigt.
Darum kann ich's auch nicht testen.

ausblenden C#-Quelltext
1:
MessageBox.Show(row.IsNewRow.ToString());					


... ergibt den Wert False (eingentlich nicht wirklich gut, oder?).

Vor der while-Schleife setze ich noch folgende Methode:

ausblenden C#-Quelltext
1:
dataGridView1.Rows.Clear();					


... damit ich ein leeres DataGridView erhalte.
Hat diese Methode einfluss auf die Spaltennamen?
(Von mir aus gesehen eigentlich nicht, die Spaltennamen werden durch Clear() nicht gelöscht).

Gruss
mats74
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Mo 22.08.11 14:29 
so ist es normalerweise auch, die struktur bleibt erhalten und die datensätze werden "weggeschmissen". Vieleicht solltest du lieber die datasource verändern anstelle des grids, ich erstelle datatables und weise diese der datasource des datagridviews zu. Ist meiner meinung nach die bessere Lösung, da ein datagridview nur zur darstellung dient

Für diesen Beitrag haben gedankt: mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mo 22.08.11 14:41 
Da hast Du sicherlich recht.
Die Zuweisung der Datasource ist bestimmt die bessere Lösung.
Ich werde mich zukünftig an dieses Prinzip halten.

Vielleicht finde ich den Fehler doch noch raus, ich würde es dann posten.

Gruss
mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mo 22.08.11 16:44 
Hallo

Ich habe viele mögliche Codevarianten erstellt und bin zu keinem Resultat gelangt.
Der Fehler hat definitv nichts mit Schleifen oder sonstigen Anweisungen zu tun.
Der Fehler wird immer bei folgendem Code ausgegeben (allgemeingültig zu verstehen):

ausblenden C#-Quelltext
1:
2:
3:
4:
DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dataGridView1);
row.Cells["MEINSPALTENNAME"].Value = "Irgendetwas";
dataGridView1.Rows.Add(row);


Möglicherweise wird diese Programmiermöglichkeit vom Compiler falsch interpretiert oder umgesetzt.
VS ergibt bei mir beim Kompilieren jedenfals keinen Fehler, erst beim Ausführen des Programmcodes.

Also ich beschränke mich wohl oder übel auf die Wertzuweisung durch den Spaltenindex.

Gruss
mats74
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 22.08.11 17:03 
Mit ein wenig Debuggen sollte sich das schon herausfinden lassen. Hat CreateCells überhaupt eine Auswirkung, stimmt die Cells-Property danach?

_________________
>λ=
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mo 22.08.11 17:08 
Also wenn ich den Stringwert mit dem entsprechenden Spaltenindex ersetze, funktioniert alles.
Beim Debuggen bleibt er auf der 3. Zeile stehen

ausblenden C#-Quelltext
1:
(row.Cells["MEINSPALTENNAME"].Value = "Irgendetwas";)					


Da bin ich leider am Ende meines Lateins.
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Mi 24.08.11 09:13 
Versuchs mal so:
das funktioniert

ausblenden C#-Quelltext
1:
2:
3:
4:
DataRow row = datatable.NewRow();
row["MEINSPALTENNAME"]="irgendetwas";
datatable.Rows.Add(row);
dataGridView.DataSource=datatable;

Für diesen Beitrag haben gedankt: mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Mi 24.08.11 11:42 
Hallo dark-destination1988

Super, Deine Lösung funktioniert tip top.
Ich habe noch eine kleine Anmerkung.
Die Spalte muss zuerst der DataTable noch bekannt gemacht werden.
Die zusätzlichen Spalten der DataTable werden dann am Schluss des DataGridView's erstellt.
Je nach Anwendung muss dieser Umstand dann noch beachtet werden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
DataTable datatable = new DataTable();
datatable.Columns.Add("MEINSPALTENNAME");
DataRow row = datatable.NewRow();
row["MEINSPALTENNAME"]="irgendetwas";
datatable.Rows.Add(row);
dataGridView.DataSource=datatable;



Dank Deinem Code habe ich doch noch eine Lösung zum Beschreiben der bestehenden DataGridViewRow's gefunden.
Ich schreibe zuerst eine leere Zeile ins DatagridView und fülle dann die Zellinhalte der DataTable in die verschiedenen Spalten des DataGridView's ein:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
DataTable datatable = new DataTable();
datatable.Columns.Add("MEINSPALTENNAME");
DataRow row = datatable.NewRow();
row["MEINSPALTENNAME"] = "irgendetwas";
datatable.Rows.Add(row);
dataGridView1.Rows.Add();
dataGridView1.Rows[0].Cells["MEINSPALTENNAME"].Value = row["MEINSPALTENNAME"].ToString();


Somit habe ich die Zellwerte in der richtigen Spalte erhalten und kann den DataGridView-Inhalt aus beliebigen DataTable's zusammenstellen.
Mit diesem kleinen Umweg haben wir doch noch das Ziel erreicht.
Warum ich diesen Umweg über die zusätzliche DataTable machen muss und nicht direkt in eine neue Zeile über den Spaltennamen des DataGridView's editieren kann, ist mir immer noch ein Rätsel.
Aber Hauptsache es funktioniert.

Vielen Dank für Deine Hilfe.

Gruss
mats74
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Mi 24.08.11 12:30 
naja wie gesagt das datagridview ist im endeffekt das frontend und dient im prinzip zum darstellen. die datatable ist die "quelle" für das dgv.
edit:
das mit der Spalte hinzufügen hat ich vergessen, aber du hast es ja selber rausbekommen ;)