Audi Geschrieben 8. April 2009 Geschrieben 8. April 2009 Hallo hoffe ihr könnt mir helfen, habe ein DataGridView und möchte es über einen Button speichern um evt. Zugriff drauf zu haben, die Datenbank selbst soll unberührt bleiben (ReadOnly), wie gehe ich da vor? Habe gedacht dass es am besten sein würde, wenn es in XML abgespeichert wird. Danke schon im Voraus! Zitieren
Kati82 Geschrieben 8. April 2009 Geschrieben 8. April 2009 Also ich habe es in eine csv-Datei gespeichert. Ist aus meiner Sicht einfacher. Habe dazu zeilenweise das dgv ausgelesen und in die Datei reingeschrieben. Wenns dich interessiert, kann ich den Code posten. Gruß Kati82 Zitieren
Audi Geschrieben 8. April 2009 Autor Geschrieben 8. April 2009 ja ist ja eigentlich egal wie es gepeichert wird! haupsache ich habe zugriff drauf! Währe schön! danke Zitieren
Audi Geschrieben 8. April 2009 Autor Geschrieben 8. April 2009 wie hast du es mit dem Laden ins DGV gemacht? Zitieren
Kati82 Geschrieben 8. April 2009 Geschrieben 8. April 2009 (bearbeitet) Also hier der Code zum Schreiben in die Datei. Habe auch überprüft, ob was in der Tabelle steht. Ist auch unabhängig davon, wie viele Spalten es gibt. Mit den Streams bin ich auch noch etwas ungeübt. Sieht vielleicht etwas komisch aus, aber es funktioniert. System::Void Form1::bCSVExport_Click(System::Object^ sender, System::EventArgs^ e) { long count = dgvResults->ColumnCount; StreamWriter^ csvStream; // Open SaveDialog SaveFileDialog^ saveDialog = gcnew SaveFileDialog; saveDialog->Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*"; saveDialog->FilterIndex = 1; // Is dgvResults empty? if (dgvResults->Rows->Count > 1) { if (saveDialog->ShowDialog() == ::DialogResult::OK) { Stream^ sFile; try { sFile = saveDialog->OpenFile(); } catch (System::Exception ^exp) { MessageBox::Show(exp->ToString(), "Error"); return; } csvStream = gcnew StreamWriter(sFile); if ( csvStream != nullptr ) { long columns = dgvResults->ColumnCount; long rows = dgvResults->RowCount - 1; String^ strline; // Print the Header strline = ColNr->HeaderText; for(int i = 1; i < columns; i++) { strline += ";" + dgvResults->Columns[i]->HeaderText; } csvStream->WriteLine(strline); // Print the Table for (int i = 0; i < rows; i++) { strline = dgvResults[0,i]->Value->ToString(); for (int j = 1; j < columns; j++) { try { strline += ";" + dgvResults[j,i]->Value->ToString(); } catch (System::Exception ^) { strline +=";"; } } csvStream->WriteLine(strline); } } csvStream->Close(); String^ filename = saveDialog->FileName; // Open Excel try { System::Diagnostics::Process::Start(filename); Form1::BringToFront(); } catch (System::Exception ^exp) { MessageBox::Show(exp->ToString(), "Error"); return; } } } }[/PHP] Das Laden ist in meinem Fall nicht notwendig gewesen. Aber ich denke, das funktioniert genauso. Stream öffnen zum lesen und dann zeilenweise in das dgv oder die DataTable eintragen. Gruß Kati82 P.S.: sehe gerade, dass ich die aller erste Variable "count" nirgendwo gebrauche. Ich glaub die kann weg. Bearbeitet 8. April 2009 von Kati82 Zitieren
HJST1979 Geschrieben 8. April 2009 Geschrieben 8. April 2009 Ich habe hier noch eine Idee in einer Centralen klasse definierst du eine Variable als DatagridView Public globaldgvSave as DatagridView Beim drücken auf Speichern machst folgendes: globaldgvSave = new DataGridView globaldgvSave = Me.dgv Jetzt kannst du auf die Variable genauso zugreifen wie als wenn du auf das DataGridView selbst zugreifst. Sauberer wäre natürlich wenn du diese Variable nicht Public machst sondern Private aber dafür "Public Sub get und set" mfg Hans-Jörg Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.