2012-07-13 80 views
0

我有一個動態數據列表,其中包含由PIVOT函數創建的動態列數。一切或多或少的作品,但我想申請一些自定義格式的一些列。我想通了如何通過只是把第一行和鑄造它像這樣得到列的列表:MVC 3具有動態源的WebGrid

var columns = Model.Comparisons.Select(x => x).FirstOrDefault() as IDictionary<string, object>; 

接下來,我決定通過循環在「列」創建我的列表,其中只要工作原理通過它們的動態字段名直接從句例如:我引用在動態域「格式」:

foreach (var c in columns) 
{ 
    switch (c.Key) 
    { 
     case "Cost": 
      cols.Add(grid.Column(
      columnName: c.Key, 
      header: c.Key, 
      format: (item) => Convert.ToDecimal(item.Cost).ToString("C"))); 
      break; 
     default: 
      cols.Add(grid.Column(columnName: c.Key, header: c.Key, format: item => item[c.Key])); 
      break; 
    } 
} 

「默認」不動態獲取每個記錄的值。我相信它與「item [c.Key]」vs item.Cost有關。問題是我不想爲每個領域寫出不同的案例,主要是因爲我不能提前知道它們,因爲數據可能會改變。大約有6個字段將始終存在。不過我知道數據類型,這就是爲什麼我想在它們上面放置一個自定義格式的原因。

編輯

我設法通過編寫擴展方法來解決這個問題。

public static class DynamicDataHelper 
{ 
    public static WebGridColumn GetColumn(this HtmlHelper helper, string vendor) 
    { 
     return new WebGridColumn() 
     { 
      ColumnName = vendor, 
      Header = vendor, 
      Format = (item) => helper.ActionLink(
       (string)Convert.ToDecimal(item[vendor]).ToString("C"), 
       "VendorSearch", 
       "Compare", 
       new { Vendor = vendor, mpn = item.MPN }, 
       new { target = "_blank" }) 
     }; 
    } 
} 

回答

0

我編輯我的職務與HTML幫助,我寫,將在建的效果,我有問題的定製WebGridColumn對象。 「供應商」從視圖傳入,然後在運行時解析。它效果很好。