2012-02-29 18 views
0

ドロップダウンリストから選択するcsvファイルのリストがあります。各csvのデータは異なります。私はcsvファイルを読み込み、同じwebgridを使ってデータを表示したいと思っています。動的オブジェクトをwebgridに渡すので、webgridはすべてのcsvデータの列と値を表示できますか?同じウェブグリッドコントロールに異なるオブジェクト

答えて

0

もしはい、あなたは、動的なビューモデルを使用できます。

public class MyViewModel 
{ 
    public string SelectedCsv { get; set; } 
    public IEnumerable<SelectListItem> AvailableCsv { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "foo.csv", Text = "foo.csv" }, 
       new SelectListItem { Value = "bar.csv", Text = "bar.csv" }, 
       new SelectListItem { Value = "baz.csv", Text = "baz.csv" }, 
      }; 
     } 
    } 

    public IEnumerable<object> Data { get; set; } 
} 

をして、コントローラがあります。

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      Data = GetData("foo.csv"), 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     model.Data = GetData(model.SelectedCsv); 
     return View(model); 
    } 

    // TODO: move this method away in a repository and 
    // do the actual parsing of the CSV file 
    private IEnumerable<object> GetData(string csv) 
    { 
     if (csv == "foo.csv") 
     { 
      return new[] 
      { 
       new { col1 = "value1", col2 = "value2" }, 
       new { col1 = "value1", col2 = "value2" }, 
      }; 
     } 
     else if (csv == "bar.csv") 
     { 
      return new[] 
      { 
       new { col1 = "bar value1", col2 = "bar value2", col3 = "bar value3" }, 
      }; 
     } 
     else if (csv == "baz.csv") 
     { 
      return new[] 
      { 
       new { col1 = "baz value1" }, 
       new { col1 = "baz value2" }, 
       new { col1 = "baz value3" }, 
      }; 
     } 

     throw new NotImplementedException(); 
    } 
} 

をし、ビュー内:

@model MyViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.DropDownListFor(x => x.SelectedCsv, Model.AvailableCsv) 
    <button type="submit">OK</button> 
} 

@{ 
    var grid = new WebGrid(Model.Data); 
} 

@grid.GetHtml() 

限りCSVファイルの解析が関係している場合は、1つのことがあった場合 do、それはroll your own CSV parserになります。

関連する問題