簡體   English   中英

錯誤“無法將類型'string'隱式轉換為'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM