Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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!

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

ja ist ja eigentlich egal wie es gepeichert wird! haupsache ich habe zugriff drauf!

Währe schön! danke

wie hast du es mit dem Laden ins DGV gemacht?

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

versuch ich mal, danke dir

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.