Freelance Project Requests info@CodeDocu.de Software Development in C# WPF Asp.Net Core Vba Excel Word SQL-Server EF Linq, UWP Net
#

WPF Datagrid: Column is not displayed

 

 

Problem:

If you load a DataGrid with a data source in WPF and there is a column in the header of the tables. Point in the end,

then column will be displayed but the values will not be loaded.

 

Solution:

Since data binding in WPF to a DataGrid Control is simplified internally, only the tables header or table column names can be checked to ensure that there are no points as endings, or that they are removed at runtime.

The same should apply to the usual special characters.

Alternatively, you can manually fill the DataGrid with items.

 

Subject:

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" 

         />

 

 

Data loading with data binding

Load data into a DataGrid via data binding

 

A simple code example 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;

 

Example standard

Data from Excel without a dot as an example

 

The WPF Datagrid loads properly

 

Error Reproduction

With a . Dot in the header of column C.

 

As you can see, the actual data is not displayed

 

 

C # code example

Code Example for loading a WPF datagrid with data.

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 Datagrid: Set Color of Row when it has no Focus
»
WPF Datagrid: Change the Color of Selected Row
»
WPF: Change Selected Row Color in DataGrid
»
WPF: Read SelectedItem from DataGrid with Dynamic As Anonymous Type
»
WPF: Elements too wide, edge Cut off
»
Solved: System.InvalidCastException HResult 0x80004002 in Select DataGrid
»
WPF: Combobox Selected Value
»
WPF Datagrid: Column is not displayed
»
WPF: Show video in preview
»
WPF Webbrowser: Suppress Java Errors or Set WebBrowser to Silent

.

Contact for Jobs, Project Requests: raimund.popp@microsoft-programmierer.de