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: Datum aus Datumsfeld Datepicker speichern
»
WPF Datagrid: Spalte wird nicht angezeigt
»
WPF: Popup Höhe begrenzen
»
WPF Popup: Position Unten, Links nach Rechts
»
WPF Popup: Placement Position
»
WPF: Element on Top, Popup Overlay oder Window
»
WPF,c#: Hover Effekt durch Anpassen der Hintergrund Farbe
»
WPF, TextBox: Text vertikal ausrichten in einer Textbox
»
WPF: Löschen aller Children Elemente
»
WPF: Background zur Laufzeit ändern

.

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