C# “错误”;无法隐式转换类型';字符串';至';系统类型';
我得到一个“dd-mmm-yyyy”格式的排序错误,绑定到网格时,它应该按日期、月份、年份进行排序 “无法将类型'string'隐式转换为'System.type'”C# “错误”;无法隐式转换类型';字符串';至';系统类型';,c#,C#,我得到一个“dd-mmm-yyyy”格式的排序错误,绑定到网格时,它应该按日期、月份、年份进行排序 “无法将类型'string'隐式转换为'System.type'” 您正在将列的数据类型设置为字符串的内容,即当前日期时间。当前日期时间不是有效的类型。另外,我非常确信,更改包含数据的现有列的数据类型也会引发异常 如果你去掉这三行 DateTime NowDate = System.DateTime.Now; string NewDate = NowDate.ToString("dd-MMM-yy
您正在将列的数据类型设置为字符串的内容,即当前日期时间。当前日期时间不是有效的类型。另外,我非常确信,更改包含数据的现有列的数据类型也会引发异常 如果你去掉这三行
DateTime NowDate = System.DateTime.Now;
string NewDate = NowDate.ToString("dd-MMM-yyyy");
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString();
我怀疑这将以您试图使其工作的方式工作。错误在以下行中:
dw.Table.Columns[“RequiredDate”]。数据类型=NewDate.ToString()
DataType属性获取或设置存储在选定列中的数据类型。
下次请包括错误的行号。。。这很有帮助。
看起来您正在为DataColumn的DataType属性分配一个字符串,该属性需要一个类型对象。所以解决办法是
dw.Table.Columns["RequiredDate"].DataType = NewDate.GetType(); // or typeof(DateTime)
更新(对于问题#2-排序未发生)
改编自中的代码片段(在这里查找帮助器方法的实现)。
数据列的格式化应由表示层/使用者负责。但是,如果确实需要在DataView中执行此操作-
第二条线是关键;您正在将字符串(NewDate.ToString()
)分配为类型
作为值
在.NET中,所有内容都有类型
,但也有系统.Type的实例。它基本上是一个特殊/特定的类,描述另一个类(但实际上不是该类的实例)。一个粗略的比喻是,它就像一个蓝图——它描述了一些东西,但它不是真实的东西
要检索类型的实例
可以使用运算符您可以通过将数据类型设置为使用typeof(DateTime)或DateTime.Now.GetType()的类型来修复它。但我不明白的是你为什么这么做?DataView返回了一个行和列的列表,从上面的代码中,您只是在使用它,为什么要更改数据类型?也许您想要的是格式化显示的数据?如果您想与.NET Framework命名约定保持一致,请对局部变量使用camelCase(而不是PascalCase)。我需要根据服务器端coing dd MMM yyyy中的日期、年、月进行此格式的排序。我现在就知道了。但是你的代码不够有代表性。您已经添加并使用了该列,但尚未为该新列指定值。@vigna。。。这对我有用。第二个数据视图按Asc日期顺序排序。将您的代码与上述代码进行比较,找出差异。
dw.Table.Columns["RequiredDate"].DataType = NewDate.GetType(); // or typeof(DateTime)
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
string NewDate = NowDate.ToString("dd-MMM-yyyy");
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString();