Autor |
Beitrag |
Talemantros
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Di 14.04.15 07:57
Hallo,
ich hätte da mal wieder eine Frage!
Wie die Überschrift es sagt, würde ich gern aus einem DataGridView alle markieren Zeilen in ein DataTable packen um dieses an eine Methode zu übergeben.
Mein Ansatz bisher:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| DataTable dt = new DataTable(); dt.Columns.Add("Oktabiner"); dt.Columns.Add("Brutto"); dt.Columns.Add("Netto"); dt.Columns.Add("Charge");
foreach (DataGridViewRow zeile in dgvUebersicht.SelectedRows) { dt.Rows.Add((string)zeile.Cells[1].Value, (double)zeile.Cells[2].Value, (double)zeile.Cells[3].Value, (string)zeile.Cells[4].Value); } |
Geht das anders, oder ist es ok so etc?!
Vielen Dank
Viele Grüße
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 14.04.15 10:38
Wenn die Quelle auch eine DataTable war und du eine genaue Kopie der Rows brauchst (du hast in deinem Code zumindest die erste Spalte weggelassen) dann
würde ich DataTable und DataRows kopieren.
C#-Quelltext 1: 2: 3:
| DataTable dt = (dgvUebersicht.DataSource as DataTable).Clone(); foreach (DataGridViewRow row in dgvUebersicht.SelectedRows) dt.ImportRow((row.DataBoundItem as DataRowView).Row); |
|
|
Talemantros
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Mi 15.04.15 12:11
Hi,
danke!
Das schaue ich mir mal an.
Das "neue" DataTable will ich in eine ExcelDatei schreiben.
Die Spalte 0 des "alten" beinhaltet nur die ID aus der Datenbank.
Da ich das DataTable nach Excel mit einer Schleife schreibe, die jede Spalte durch geht. Könnte hier auch einfach den Schleifenzähler anpassen.
Danke
Viele grüße
|
|
Talemantros
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Do 16.04.15 11:19
Hallo,
ich habe es schon als erledigt markiert, habe jetzt aber das Problem beim Übernehmen des Quellcodes, dass er folgendes bemängelt:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Dies passiert nach auskommentieren und Testen in folgender Zeile
C#-Quelltext 1:
| DataTable dt = (dgvUebersicht.DataSource as DataTable).Clone(); |
Ich kann damit leider gar nichts anfangen
Würde ich über Hilfe freuen.
Gruß
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 16.04.15 11:33
Was ist den in dgvUebersicht.DataSource für ein Typ?
Wenn das bei dir knallt beim dann könntest du beim debuggen doch einfach mal schnell gucken was in dgvUebersicht.DataSource drin steckt.
Ich war davon ausgegangen das es eine DataTable ist. Die Code funktioniert an dieser Stelle nur wenn DataSource nicht null ist und das zugewiesene Quell Object eine DataTable ist.
|
|
Talemantros
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Do 16.04.15 11:58
Also es wird von der Methode ein DataTable geliefert.
Das ist soweit ok.
Ralf Jansen hat folgendes geschrieben : |
Wenn das bei dir knallt beim dann könntest du beim debuggen doch einfach mal schnell gucken was in dgvUebersicht.DataSource drin steckt. |
*hust* Wie meinst du das?
Sorry, dass ich das gerade nicht verstehe
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 16.04.15 12:05
Du druckst in Visual Studio den Start Knopf (oder F5) dann läuft dein Programm im Debugger. Wenn jetzt die besagte Exception Auftriff wird Visual Studio an dieser Stelle anhalten. Jetzt gehst du mit der Maus über die Code Stelle wo dgvUebersicht.DataSource steht und solange du über DataSource hoverst wird dir Visual Studio anzeigen was da drin ist.
Debuggen ist eine absolute essentielle Fähigkeit beim programmieren wenn die dir abgeht sollte du die schnell angehen. Ist wichtiger als alle möglichen anderen Programmierfähigkeiten die man sonst noch so brauchen könnte. Nach dem ersten "Hallo Welt" Proggi sollte gleich ein "wie debug ich das" beim lernen kommen.
|
|
Talemantros
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Do 16.04.15 13:55
Hallo Ralf,
dann habe ich es vor meiner Frage doch richtig gemacht, aber dadurch, dass ich den Code in einem try-Catch Block hatte ging es nicht.
Das mit dem Debuggen muss ich mir noch mehr angewöhnen.
Habe den try-Catch mal entfernt und jetzt meldet er mir dies auch .
Siehe Anlage:
Das DataGrid ist nicht leer, daher ich verstehe ich nicht, dass es angeblich NULL sein soll.
EDIT:
Beim Laden des Forms habe ich
C#-Quelltext 1: 2:
| bsOktabiner.DataSource = OktabinerMethods.GetDataTableOktabinerForRecycler(1, 0); dgvUebersicht.DataSource = bsOktabiner; |
Ich habe jetzt deinen Code wie folgt angepasst, dies würde funktionieren
C#-Quelltext 1: 2: 3:
| DataTable dt = (bsOktabiner.DataSource as DataTable).Clone(); foreach (DataGridViewRow row in dgvUebersicht.SelectedRows) dt.ImportRow((row.DataBoundItem as DataRowView).Row); |
Kann ich dies so lassen, oder übersehe ich was?
Einloggen, um Attachments anzusehen!
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 16.04.15 14:49
Deine Datenquelle war im original Code dann keine DataTable sondern eine BindingSource.
Der as Operator versucht in den gewünschten Datentyp zu casten und wenn das nicht geht da es kein castbarere Typ ist kommt da null raus.
dgvUebersicht.DataSource as DataTable wird also zu null ausgewertertet da es ja eine BindingSource ist und keine DataTable (zumindest nicht direkt).
Und Clone() an null aufrufen knallt dann wie du festgestellt hast.
Auf bsOktabiner.DataSource direkt zuzugreifen ist dann genau das Richtige. Zumindest fällt mir da gerade auch nix besseres ein.
Edit: Nebenbei den try..catch mußt du nicht auskommentieren. In Visual Studio kann man im Exception Dialog steuern wie bzw. wo der Debugger anhalten soll wenn eine Exception auftritt (dort wo sie gefangen wird und/oder da wo sie geworfen wird). Im Menü unter Debug/Exceptions oder CTRL+D,E.
|
|
Talemantros
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Fr 17.04.15 13:29
Hallo Ralf,
vielen Dank.
VG und schönes Wochenende
|
|