我收到格式为“dd-mmm-yyyy”的错误,它应该在绑定到网格时对日期,月份,年份进行排序
“无法将类型'string'隐式转换为'System.Type'”
DataView dw = PurchaseRequestDetails.Tables[0].DefaultView;
DateTime NowDate = System.DateTime.Now;
string NewDate = NowDate.ToString("dd-MMM-yyyy");
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString();
dw.Sort = "RequiredDate ASC";
foreach (DataRowView dr in dw)
{
System.Diagnostics.Debug.WriteLine("RequiredDate: " + dr["RequiredDate"].ToString());
}
dgvPurReq.DataSource = dw;
dgvPurReq.DataBind();
答案 0 :(得分:3)
错误在于: dw.Table.Columns [“RequiredDate”]。DataType = NewDate.ToString();
DataType属性获取或设置存储在所选列中的数据类型。 http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx
答案 1 :(得分:2)
您要将列的数据类型设置为字符串的内容,即当前日期时间。当前日期时间不是有效类型。此外,我很确定使用其中的数据更改现有列的数据类型也会引发异常。
如果删除这三行
DateTime NowDate = System.DateTime.Now;
string NewDate = NowDate.ToString("dd-MMM-yyyy");
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString();
我怀疑这会以你试图让它发挥作用的方式发挥作用。
答案 2 :(得分:2)
string NewDate = NowDate.ToString("dd-MMM-yyyy");
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString();
第二行是关键;您正在将字符串(NewDate.ToString()
)to a property that accepts和Type
作为值进行分配。
在.NET中,所有都一个Type
,但也有 System.Type
的实例。它基本上是一个特殊/特定的类,它描述了另一个类(但实际上并不是该类的一个实例)。一个粗略的比喻就是它就像一个蓝图 - 它描述了一些东西,但它并不是真正的东西。
要检索Type
的实例,您可以使用typeof()运算符
答案 3 :(得分:2)
您可以通过使用typeof(DateTime)或DateTime.Now.GetType()将DataType设置为类型来修复它。但我不明白你为什么这样做?返回DataView的行和列列表,从上面的代码中,您只是使用它,为什么要更改数据类型?也许你想要的是格式化显示的数据?
答案 4 :(得分:1)
请在下次包含错误的行号...这有助于 您似乎要将一个字符串分配给DataColumn的DataType属性,该属性需要一个Type对象。所以修复将是......
dw.Table.Columns["RequiredDate"].DataType = NewDate.GetType(); // or typeof(DateTime)
更新(针对问题#2 - 排序不会发生) 改编自this MSDN Page的代码片段(在此处查看辅助方法的实现)。 DataColumn的格式化应该是表示层/使用者的责任。但是,如果您确实需要在DataView中执行此操作 - link
private static void DemonstrateDataView(){
// Create one DataTable with one column.
DataTable myTable = new DataTable("myTable");
DataColumn colItem = new DataColumn("item",typeof(DateTime));
myTable.Columns.Add(colItem);
// Add five items.
DataRow NewRow;
for(int i = 0; i <5; i++){
NewRow = myTable.NewRow();
NewRow["item"] = DateTime.Now.AddDays(-i);
myTable.Rows.Add(NewRow);
}
myTable.AcceptChanges();
// Print current table values.
PrintTableOrView(myTable,"Current Values in Table");
DataView secondView = new DataView(myTable);
secondView.Sort = "item";
PrintTableOrView(secondView, "Second DataView: ");
}
输出:
Current Values in Table
8/10/2010 11:34:28 AM
8/9/2010 11:34:28 AM
8/8/2010 11:34:28 AM
8/7/2010 11:34:28 AM
8/6/2010 11:34:28 AM
Second DataView:
8/6/2010 11:34:28 AM
8/7/2010 11:34:28 AM
8/8/2010 11:34:28 AM
8/9/2010 11:34:28 AM
8/10/2010 11:34:28 AM