[英]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.