Punkt im DataGrid-Column zeigt kein Text in den Zellen ??
-
Guten Abend,
ich arbeite zum ersten mal mit der WPF-Gui und habe ein merkwürdiges Problem mit dem DataGrid.
Ich hole mit folgender Funktion Daten aus einer Datenbank und schreibe sie in ein DataTable:
public DataTable GetDSTable(Int32 nStatus) { String[] tableColumns = new String[] { "BestellNr", "Lieferant", "Erstellt am", "Summe Netto", "Zuletzt angemahnt", "Druck am", "Email am", "Fax am", "Kommentar", "Fremdbelegnummer", "# Pos", "Gesamtmenge" }; DataTable dataTable = new DataTable(); foreach (String columnName in tableColumns) { dataTable.Columns.Add(columnName, typeof(String)); } using (SqlConnection sqlCon = OpenWawiSqlConnection()) { using (SqlCommand tLieferantenBestellungCmd = new SqlCommand("SELECT kLieferant, kLieferantenBestellung, cEigeneBestellnummer, dErstellt, dAngemahnt, dGedruckt, dGemailt, dGefaxt, cInternerKommentar, cFremdbelegnummer FROM tLieferantenBestellung WHERE nStatus = '" + nStatus.ToString() + "'", sqlCon)) { SqlDataReader sqlReader = tLieferantenBestellungCmd.ExecuteReader(); while (sqlReader.Read()) { Int32 supplierId = sqlReader.GetInt32(sqlReader.GetOrdinal("kLieferant")); Int32 supplierOrderId = sqlReader.GetInt32(sqlReader.GetOrdinal("kLieferantenBestellung")); DataRow row = dataTable.NewRow(); row[0] = GetString(sqlReader, "cEigeneBestellnummer"); row[1] = GetSupplierName(supplierId); row[2] = GetDateTimeString(sqlReader, "dErstellt"); row[3] = GetSupplierOrderNettoTotal(supplierOrderId).ToString(); row[4] = GetDateTimeString(sqlReader, "dAngemahnt"); row[5] = GetDateTimeString(sqlReader, "dGedruckt"); row[6] = GetDateTimeString(sqlReader, "dGemailt"); row[7] = GetDateTimeString(sqlReader, "dGefaxt"); row[8] = GetString(sqlReader, "cInternerKommentar"); row[9] = GetString(sqlReader, "cFremdbelegnummer"); row[10] = GetSupplierOrderPosCount(supplierOrderId).ToString(); row[11] = GetSupplierOrderTotalAmount(supplierOrderId).ToString(); dataTable.Rows.Add(row); } } sqlCon.Close(); } return dataTable; }
Danach wird das ganze an das DataGrid gebunden:
mainDataGrid.ItemsSource = sqlManager.GetDSTable(600).DefaultView;
Sobald aber irgendwo in einem Spaltennamen ein Punkt ist, werden in allen Zellen die zu der Spalte gehören kein Text angezeigt. Wenn ich aber z.B. "BestellNr." zu "BestellNr" ändere dann geht es.
Ich kann es leider nicht nachvollziehen woran das liegen könnte und hoff dass es einer von euch weiß.
Mit freundlichen Grüßen
Sensi
-
Hallo,
Spaltennamen sollten eigentlich immer nur aus einer Menge von festgelegten Zeichen zusammengesetzt werden. Der Punkt ist nicht enthalten, will man oder muss man doch solche Namen verwenden, dann sind "delimited identifiers" zu verwenden, und die Spaltenbezeichnung muss dann in bestimmte Zeichen "eingeklammert" werden, üblich sind eckige Klammern -> [BestellNr.]
MfG,
Probe-Nutzer
-
Hallo Probe-Nutzer,
meinst du "delimited identifiers" im bezug auf sql oder auf das datagrid?
-
Eigentlich meinte ich das auf SQL bezogen, aber da habe ich nicht genau hin gesehen, deine Spaltennamen in der Datenbank sind in Ordnung. Aber auch für die tableColums, die du definierst, ist der Punkt problematisch, das habe ich auch irgendwo schon einmal gelesen, auch da muss man eckige Klammern setzen, wenn ich das richtig in Erinnerung habe.
MfG,
Probe-Nutzer
-
Das komische daran ist dass es nur nicht funktioniert wenn ich DataTable an das DataGrid binde, wenn ich die Spalten direkt über xaml einbinde geht das mit dem Punkt ohne Probleme und der Zellentext wird angezeigt.
In WinForms ging das immer ohne Probleme aber irgenwie kommt das DataGrid von WPF nicht mit einem Punkt im Spaltennamen klar... es in Klammern zu packen bringt auch nix.
-
Ich habe den Beitrag wieder gefunden, den ich gelesen hatte, probiere das, was hier:
beschrieben wird, aus.
MfG,
Probe-Nutzer
-
Vielen Dank das funktioniert super.
MFG Sensi