Veröffentlicht 8. April 200916 j 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!
8. April 200916 j 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
8. April 200916 j ja ist ja eigentlich egal wie es gepeichert wird! haupsache ich habe zugriff drauf! Währe schön! danke
8. April 200916 j 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 200916 j von Kati82
8. April 200916 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.