簡體   English   中英

C#-如何將名稱為日期的列添加到數據表

[英]C# - How to add a Column with it's name being a Date to a DataTable

我試圖將自定義列添加到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"/>

如果您使用的是WPF的DataGrid,則“ /”字符在綁定路徑中還有其他含義。 解決方案是將事件處理程序添加到xaml中的AutoGeneratingColumn事件中:

<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:希望它能對您有所幫助(我已經從側面進行了測試,可以)。

您的源代碼看起來不錯。 綁定報表DataTable后,也許沒有更新dataGridView。

我從我的角度嘗試了您的代碼,並將其與DataGridView綁定:

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

而且效果很好。

看待!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM