Zum Inhalt springen

DataGridView speichern?


Empfohlene Beiträge

Geschrieben

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!

Geschrieben

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

Geschrieben (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 von Kati82
Geschrieben

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 Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...