Hallo Zusammen,
ich beschäftige mich gerade mit C# / WPF / DataGrid und möchte den Inhalt des DataGrid nach Excel exportieren.
Das DataGrid befülle ich aus einer SQL - Datenbank.
Obwohl ich schon so einiges aus dem WWW ausprobiert habe, bekomme ich es nicht hin, das die Zeilen aus dem DataGrid nach Excel geschrieben werden.
Kann mir dabei jemand weiterhelfen, besten Dank?
<DataGrid x:Name="DGV01" Margin="10,10,10,70" AlternatingRowBackground="LightGray" AlternationCount="2" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding AUF_NR}" Width="60" Header="Proj.-Nr." />
<DataGridTextColumn Binding="{Binding AUF_LIEFERTERMIN, StringFormat=\{0:dd.MM.yy\}}" Width="75" Header="Liefertermin" />
</DataGrid.Columns>
</DataGrid>
private void ButExcel_Click(object sender, RoutedEventArgs e) //, object Exceltabelle)
{
Excel.Application MyExcel = new Excel.Application();
MyExcel.Visible = true;
Workbook MyWorkbook = MyExcel.Workbooks.Add(System.Reflection.Missing.Value);
Worksheet MySheets = (Worksheet)MyWorkbook.Sheets[1];
MyWorkbook.Activate();
//Header row
for (int i = 0; i < DGV01.Columns.Count; i++)
{
MySheets.Range["A2"].Offset[0, i].Value = DGV01.Columns[i].Header;
}
//Rows
for (int j = 0; j < DGV01.Items.Count; j++)
{
for (int k = 0; k < DGV01.Columns.Count; k++)
{
MySheets.Range["A3"].Offset[j, k].Value = DGV01.Items[j].ToString();
//MySheets.Range["A3"].Offset[j].Resize[1, k].Value = DGV01.Items[j].ToString();
}
}
}
Hallo und willkommen,
mit
MySheets.Range["A3"].Offset[j, k].Value = DGV01.Items[j].ToString();
schreibst du auch nur jeweils die ganze Zeile (DataRowView
), nicht einzelne Zellenwerte.
Diese erhältst du mit DGV01.Items[j][k].ToString()
.
Wenn du längerfristig bei WPF bleiben möchtest, dann solltest du unbedingt [Artikel] MVVM und DataBinding lesen und anwenden - sowie generell auch die Drei-Schichten-Architektur.
Hallo,
vielen Dank für die rasche Rückmeldung.
MySheets.Range["A3"].Offset[j, k].Value = DGV01.Items[j][k].ToString();
Hiermit bekomme ich aber eine Fehlermeldung.
Die Links schaue ich mir an.
Gruß
Dirk
Hallo,
vielen Dank für die rasche Rückmeldung.
MySheets.Range["A3"].Offset[j, k].Value = DGV01.Items[j][k].ToString();
Hiermit bekomme ich aber eine Fehlermeldung.
Die Links schaue ich mir an.
Gruß
Dirk
Sorry, der Index-Operator ItemCollection.Item[] gibt nur ein unspezifiziertes (allgemeingültiges)object
zurück - daher muß noch gecastet werden:
for (int j = 0; j < DGV01.Items.Count; j++)
{
if (DGV01.Items[j] is DataRowView row)
{
for (int k = 0; k < DGV01.Columns.Count; k++)
{
MySheets.Range["A3"].Offset[j, k].Value = row[k].ToString();
}
}
}
Aber du wirst sehen, daß dies mit MVVM und einem geeigneten Datencontainer im ViewModel einfacher geht.
... vielen Dank, werde ich die Tage testen, jetzt erst einmal einige Tage Urlaub.
Vielen Dank auch für die Infos und Links.
Beste Grüße Dirk