Projekt-Anfragen: Tel: 07022/9319004 info@CodeDocu.de Software Entwicklung in C# WPF Asp.Net Core Vba Excel Word SQL-Server EF Linq, UWP Net
#

WPF Datagrid: Spalte  wird nicht angezeigt

 

 

Problem:

Wenn man in WPF ein DataGrid mit einer Datenquelle lädt, und im Header der Tabellen befindet sich eine Spalte mit einem . Punkt am Ende,

dann wird  Spalte zwar angezeigt, aber die Werte werden nicht geladen.

 

Lösung:

Da die Datenbindung in WPF in ein DataGrid Control intern vereinfacht ist, kann man nur die Tabellen Header  oder Table-Column-Names darauf prüfen, dass keine Punkte als Endung vorhanden sind, oder diese zur Laufzeit entfernt werden.

Das gleiche dürfte für die üblichen Sonderzeichen gelten.

Alternativ kann man das DataGrid auch über Items manuell auffüllen.

 

Betrifft:

WPF DataGrid, AutoGenerateColumns, DataContext

 

<DataGrid x:Name="ctlDataGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"

         AutoGenerateColumns="True"

         GridLinesVisibility="All"

         Background="#F0f0f0"

         ItemsSource="{Binding}" 

         SelectionMode="Single" 

         IsReadOnly="True" 

         MouseDoubleClick="ctlDataGrid_MouseDoubleClick"

          HeadersVisibility="All"                  

          Grid.Row="1" 

         />

 

 

Daten Laden mit Databinding

Daten laden in ein DataGrid über Datenbindung

 

Ein einfaches Code Beispiel in C#

In WPF DataGrid

DataTable dataTable = new DataTable();

dataTable.Columns.Add("A");

dataTable.Columns.Add("B");

dataTable.Columns.Add("C");

 

DataRow row = dataTable.NewRow();

row[1] = 1;

row[2] = "2";

dataTable.Rows.Add(row);

 

 

_dataGrid.AutoGenerateColumns = true;

_dataGrid.DataContext = dataTable;

 

Beispiel Standard

Daten aus Excel ohne Punkt als Beispiel

 

Das WPF Datagrid wird richtig geladen

 

Fehler-Reproduktion

Mit einem . Punkt  in dem Header der Spalte C.

 

Wie man sieht, werden die eigentlichen Daten nicht angezeigt

 

 

C# Code Beispiel

Code Beispiel zum Laden eines WPF Datagrid mit Daten.

public async void load_DataGrid_with_Excel()

        {

            //----------------< load_DataGrid_with_Excel() >------------

            Excel.Range usedRange = _worksheet.UsedRange;

            

            //*fast Excel-Read: 

            //< create 2D Array >

            //*from excel with cell-content-object

            object[,] values = usedRange.Value2;

            _progressbar.Maximum = usedRange.Columns.Count;

 

            if (usedRange.Rows.Count > 0)

            {

                //< build datasouce >

                DataTable dataTable = new DataTable();

                //</ build datasouce >

 

                int nColumnsMax = usedRange.Columns.Count;

                

                //----< Read_Header >----

                for (int iColumn = 1; iColumn <= nColumnsMax; iColumn++)

                {

                    string sValue = Convert.ToString(values[1, iColumn]);

                    if (sValue == "" || sValue == null)

                    {

                        nColumnsMax = iColumn;

                        break;

                    }

                    if (iColumn>50)

                    {

                        nColumnsMax = iColumn;

                        break;

                    }

                    dataTable.Columns.Add(sValue);                    

                }

                //----</ Read_Header > ----

 

                //----< Read_DataRows >----

                

                for (int iRow = 2; iRow <= usedRange.Rows.Count; iRow++)

                {

                    if (iRow > 10000) break;

                    if (iRow % 50==0)

                    { 

                        _progressbar.Value = iRow;

                        lblStatus.Content = iRow + "/" + usedRange.Rows.Count;

                        await DoEvents();

 

                    }

                    //_progressbar.UpdateLayout();

                    //_progressbar.Dispatcher.Invoke(() => _progressbar.Value = iRow);

 

                    await Task.Run(() =>

                    {

                        //----< Row >----

                        //< add_Row >

                        DataRow row = dataTable.NewRow();

                        //</ add_Row >

 

                        

                        for (int iColumn = 1; iColumn <= nColumnsMax; iColumn++)

                        {

                            //----< read_cells_to_table >----

                            //< read >

                            string sValue = Convert.ToString(values[iRow, iColumn]);

                            if (iColumn == 1)

                            {

                                if (sValue == "" || sValue == null) { iRow=usedRange.Rows.Count; }

                            }

                            //</ read >

 

                            //< write >

                            row[iColumn -1] = sValue;

                            //</ write >

                            //--</ Transfer Cells > --

                            //----</ read_cells_to_table >----

                        }

                        dataTable.Rows.Add(row);

                        //----</ Row >----

                    });

                }

                //----</ Read_DataRows >----

 

                //< show Data >

                _dataGrid.AutoGenerateColumns = true;

                _dataGrid.DataContext = dataTable;

                

                //</ show Data >

            }

 

 

            //return true;

            //----------------</ load_DataGrid_with_Excel() >------------

        }

 

 

Mobile
»
WPF: Column oder Row ermitteln
»
WPF: SelectedItem aus DataGrid auslesen mit Anonyous Type auf Dyamic Type
»
WPF: Elemente zu breit, rand abgeschnitten
»
Gelöst: System.InvalidCastException HResult=0x80004002 SelectedItem SelectedValue
»
WPF Kurze Zeit in Grid Spalten anpassen. Anzeige Zeit Format
»
WPF: Combobox Selected Value ermitteln und zuweisen
»
WPF: Combobox füllen
»
WPF: Hintergrundfarbe einer Spalte an Daten binden
»
WPF Hintergrundfarbe einer Spalte ändern
»
WPF: Datum aus Datumsfeld Datepicker speichern

.

Jobs, Projekte, Angebote für Freiberufler, Selbstständig an Info@CodeDocu.de