C# “错误”;无法隐式转换类型';字符串';至';系统类型';

C# “错误”;无法隐式转换类型';字符串';至';系统类型';,c#,C#,我得到一个“dd-mmm-yyyy”格式的排序错误,绑定到网格时,它应该按日期、月份、年份进行排序 “无法将类型'string'隐式转换为'System.type'” 您正在将列的数据类型设置为字符串的内容,即当前日期时间。当前日期时间不是有效的类型。另外,我非常确信,更改包含数据的现有列的数据类型也会引发异常 如果你去掉这三行 DateTime NowDate = System.DateTime.Now; string NewDate = NowDate.ToString("dd-MMM-yy

我得到一个“dd-mmm-yyyy”格式的排序错误,绑定到网格时,它应该按日期、月份、年份进行排序

“无法将类型'string'隐式转换为'System.type'”


您正在将列的数据类型设置为字符串的内容,即当前日期时间。当前日期时间不是有效的类型。另外,我非常确信,更改包含数据的现有列的数据类型也会引发异常

如果你去掉这三行

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();