![](/img/trans.png)
[英]Cannot implicitly convert type 'string' to 'System.Type'
[英]Error"Cannot implicitly convert type 'string' to 'System.Type'
我收到“ 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();
錯誤在以下行中:dw.Table.Columns [“ RequiredDate”]。DataType = NewDate.ToString();
DataType屬性獲取或設置存儲在所選列中的數據類型。 http://msdn.microsoft.com/zh-CN/library/system.data.datacolumn.datatype.aspx
您正在將列的數據類型設置為字符串的內容,即當前的日期時間。 當前日期時間不是有效的類型。 另外,我非常確定更改包含數據的現有列的數據類型也會引發異常。
如果刪除這三行
DateTime NowDate = System.DateTime.Now;
string NewDate = NowDate.ToString("dd-MMM-yyyy");
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString();
我懷疑這將以您嘗試使其工作的方式起作用。
string NewDate = NowDate.ToString("dd-MMM-yyyy");
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString();
第二行是關鍵; 您正在將字符串( NewDate.ToString()
) NewDate.ToString()
接受 Type
作為值的屬性 。
在.NET中任何事物都有一個Type
,但也有實例 System.Type
。 它基本上是一個特殊/特定的類,它描述了另一個類(但實際上不是該類的實例)。 一個粗略的比喻是,它就像一個藍圖-它描述了一些東西,但這不是真實的東西。
要檢索Type
的實例,可以使用typeof()運算符
您可以通過使用typeof(DateTime)或DateTime.Now.GetType()將DataType設置為類型來修復它。 但是我不明白的是你為什么要這么做? 返回的DataView包含行和列的列表,並且從上面的代碼開始,您只是在使用它,為什么要更改數據類型? 也許您想要格式化顯示的數據?
下次請提供錯誤的行號...這樣會有所幫助。
似乎您正在將一個字符串分配給DataColumn的DataType屬性,該屬性需要一個Type對象。 所以解決辦法是...
dw.Table.Columns["RequiredDate"].DataType = NewDate.GetType(); // or typeof(DateTime)
更新(針對問題2-不會發生排序)改編自此MSDN頁面的代碼片段(有關幫助方法的實現,請參見此處)。 數據列的格式應由表示層/消費者負責。 但是,如果您確實需要在DataView中執行此操作- 鏈接
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.