2010-08-10 100 views
0

我遇到格式爲」dd-mmm-yyyy「的排序錯誤,它應該在綁定到網格時對日期,月份,年份進行排序錯誤「無法將類型'字符串'隱式轉換爲'System.Type'

「無法隱式‘串’轉換爲‘的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(); 
+1

如果您希望與.NET Framework命名約定一致,請使用camelCase(而不是PascalCase)作爲本地變量。 – zneak 2010-08-10 04:45:43

回答

2

要設置列到這是當前日期時間的字符串的內容的數據類型。目前的日期時間不是一個有效的類型,而且,我確信使用數據改變現有列的數據類型也會引發異常,

如果去掉這三行

DateTime NowDate = System.DateTime.Now; 
string NewDate = NowDate.ToString("dd-MMM-yyyy"); 
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString(); 

我懷疑這會工作,你正試圖得到它的工作方式。

1

請在下次包括錯誤的行號......因爲這有幫助。
看來你正在給DataColumn的DataType屬性賦值一個字符串,該屬性需要一個Type對象。因此,修復會...

dw.Table.Columns["RequiredDate"].DataType = NewDate.GetType(); // or typeof(DateTime) 

更新(對問題#2 - 排序不發生) 從代碼片段改編自this MSDN Page(看看這裏的執行的輔助方法)。 DataColumn的格式應該是表示層/消費者的責任。但是,如果你真的需要做到這一點的數據視圖 - 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 
+0

其未來格式正確,但排序不會發生 – 2010-08-10 04:54:57

+0

@vigna ...它爲我工作。第二個DataView按Asc順序排序。將你的代碼與上面的代碼進行比較,找出差異。 – Gishu 2010-08-10 06:09:09

2
string NewDate = NowDate.ToString("dd-MMM-yyyy"); 
dw.Table.Columns["RequiredDate"].DataType = NewDate.ToString(); 

第二行是關鍵;你正在分配一個字符串(NewDate.ToString()to a property that accepts a Type作爲一個值。

在.NET中的一切一個Type,但也有實例System.Type。它基本上是描述另一個類的特殊/特定類(但實際上並不是該類的一個實例)。一個粗略的比喻是,它像一個藍圖 - 它描述的東西,但它不是真正的thing.h

要檢索Type的實例可以使用typeof()操作

2

您可以通過設置修復DataType轉換爲使用typeof(DateTime)或DateTime.Now.GetType()的類型。但我不明白的是你爲什麼這樣做? DataView返回一個行列列表,從上面的代碼中,您只是使用它,爲什麼要更改數據類型?也許你想要的是格式化顯示的數據?

+0

我需要根據日期,年份和月份在服務器端執行此格式的排序dd-MMM-yyyy – 2010-08-10 05:05:29

+0

好吧我現在明白了。但是,那麼你的代碼不夠有代表性。您已經添加了列並使用它,但您尚未將該值分配給該新列。 – 2010-08-10 05:27:37

相關問題