C # - Как добавить столбец с его именем, являющимся датой в DataTable - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь добавить пользовательские столбцы в DataTable и не могу отобразить их правильно. Я попытался настроить имена столбцов на DateTime, но когда я это сделал, он не отображается любые данные.

var report = new DataTable();
report.Columns.Add("Material");
report.Columns.Add("Unit");

report.Columns.Add($"{new DateTime(2018, 9 , 13)}", typeof(float));
var column = new DataColumn {DataType = typeof(float), ColumnName = DateTime.Now.ToShortDateString()};
report.Columns.Add(column);
report.Columns.Add("2018-09-14", typeof(float));


report.Rows.Add(new object[] {"foo", "bar", 25.4f, 33.1f, 12});

Результат приведенного выше кода

Как видите, только столбец, имя которого набрано, показывает какие-либо данные. Как я могу назвать мои DataTable столбцы в качестве дат и заставить их работать?

Редактировать 1 Вот как я делаю привязку данных:

<DataGrid ItemsSource="{Binding Report.DefaultView}"
          AutoGenerateColumns="True"/>

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Если вы используете DataGrid из WPF, то символ "/" имеет другое значение в пути привязки. Решением является добавление обработчика событий к событию AutoGeneratingColumn в xaml:

<DataGrid ItemsSource="{Binding Report.DefaultView}"
                  AutoGenerateColumns="True"
                  AutoGeneratingColumn="Dg_OnAutoGeneratingColumn"/>

и определите метод Dg_OnAutoGeneratingColumn (может быть, в вашем коде позади):

        private void Dg_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            var textCol = e.Column as DataGridTextColumn;
            if (textCol == null)
                return;
            var binding = textCol.Binding as Binding;
            if (binding == null)
                return;
            binding.Path = new PropertyPath("[" + binding.Path.Path + "]");
        }

P / S: Я надеюсь, что это может помочь вам (я уже проверил со своей стороны, и все в порядке).

0 голосов
/ 14 сентября 2018

Ваш исходный код выглядит хорошо. Возможно, вы не обновили свой dataGridView после привязки отчета DataTable.

Я попробовал ваш код со своей стороны, свяжите его с DataGridView:

tbl_incomingrawmaterialform.DataSource = report;
tbl_incomingrawmaterialform.Update();

И это хорошо сработало.

Regard!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...