2012-03-13 58 views
0

非常に動的でなければならないWebGridを作成しようとしています。列は、私はそうのようにやったリストで定義されています。高度なASP.NET WebGrid - 動的な列と行

@{ 
    List<WebGridColumn> columns = new List<WebGridColumn>(); 
    foreach (var column in Model.Columns) 
    { 
     columns.Add(new WebGridColumn() { ColumnName = column.Name, Header = column.Name }); 
    } 
} 

@grid.GetHtml(
    columns: columns) 

すべてが順調と良いが、私が持っている問題は、行です。私は、我々は名前アドレスのための2つの列を持っているとしましょう、この質問のために...

を試してみて、説明します。

私は行オブジェクトのコレクションを持って、SearchResultオブジェクトを言うことができます。 SearchResultには、Name、Address、Phone、Height、Bra Sizeなどの任意の数の属性のディクショナリが含まれています(EAVパターンと考える)。列名に基づいて属性にアクセスする必要があります。

私はフォーマットを使ってこれを行うことができると考えましたが、わかりません。私はこのような何かしたい:

columns.Add(new WebGridColumn() { ColumnName = column.Name, Header = 
    column.Header, Format = @<text>@item.Attributes[column.Name]</text> }); 

作品のこの種のが、別の列の書式を作成するにもかかわらず、行は最後列の形式で読み込まれます。すなわち:

Name   Address 
1 Main Street 1 Main Street 
45 Paradise Av 45 Paradise Av 

など

答えて

1

私はそれはあなたが「ColumnNameに」(とにかく余分)を除外し、またダイナミックな表現はもう少し明示作れば動作するはずだと思う:

columns.Add(
    new WebGridColumn() { 
     Header = column.Header, 
     Format = (item) => @Html.Raw("<text>" + @item.Attributes[column.Name] + "</text>") 
    } 
); 
1

この問題は参照変数に関連しています。 WebGridColumnの他のプロパティの観点からFormatプロパティを持つ必要があります。これが私のやり方です:

@{ 
    List<WebGridColumn> columns = new List<WebGridColumn>(); 
    foreach (var column in Model.Columns) 
    { 
     var col = new WebGridColumn(); 
     col.Header = column.Name; 
     col.Format = (item) => @Html.Raw("<text>" + @item.Attributes[col.Header] + "</text>"); 
     columns.Add(col); 
    } 
} 
関連する問題