2

私が達成しようとしていることは説明が難しいので、もっと情報を提供できるかどうか教えてください。私はWebGridをその手段を超えて使用しようとしていると感じているので、誰かが私が試していることを実行するオープンソースの代替手段を持っているなら、それも役に立ちます。

WebGridに返されるコンテンツ(列と値)はフォームの他の基準に応じて変化するため、WebGridをゼロから構築する必要があります。これはテーブル内の数行の単純なコードで機能しますが、スタイル設定、並べ替え、ページングにWebGridを使用したいと思いました。

@model DocumentSearchViewModel

@if ((this.Model != null) && (this.Model.SearchResults != null) &&     (this.Model.SearchResults.Count() > 0))
{ 
    <table>
        <thead>
            <tr>
                <th>Document</th>
                @foreach (var metadata in this.Model.SearchResults.Metadata)
                {
                    <th>
                        @metadata.InstanceFieldName
                    </th>
                }
            </tr>
        </thead>
        <tbody>
            @foreach (var document in this.Model.SearchResults)
            {
                <tr>
                <td>
                    @Html.ActionLink(document.Id.ToString(), "Details", new { id = document.Id })
                </td>
                    @foreach (var metadata in document.Metadata)
                    {
                        <td>
                            @metadata.Value
                        </td>
                    }
                </tr>
            }
        </tbody>
    </table>
}

したがって、モデル構造を説明するために、SearchResultsにはがありIEnumerable<MetadataModel>、このMetadataModelにはInstanceFieldNameとValueのプロパティがあります。検索が実行されると、すべての結果は常に同じ数のメタデータと同じInstanceFieldNamesを持ちますが、値は異なりますが、フォームのフィールドをすばやく変更すると、新しい検索で新しい結果のセットが返される可能性があります(再度メタデータのセットは互いに同じですが、最初の結果のセットとは異なります)

グリッドの列はメタデータInstanceFieldNameに対応し、コンテンツは値に対応します。

だから私はWebGridを使って最善を尽くしましたが、私が得ることができる最善の方法は、適切な列ヘッダーと適切な行数、列には適切なデータがありますが、各行は同じです(最後からコピーされた)行)。

@{
var grid = new WebGrid(canPage: true, canSort: true, rowsPerPage: Model.PageSize,     sortFieldName: Model.Sort, sortDirectionFieldName: Model.SortDir);
grid.Bind(Model.SearchResults, rowCount: Model.DocumentCount);
List<WebGridColumn> cols = new List<WebGridColumn>();
foreach(var metadata in Model.SearchResults.Select(r => r.Metadata).FirstOrDefault())
{
    var col = new WebGridColumn();
    col.ColumnName = metadata.InstanceFieldName;
    col.Header = metadata.InstanceFieldHeader;
    col.Style = "gridRow";
    col.CanSort = true;
    cols.Add(col);
}

foreach (var result in Model.SearchResults)
{        
    foreach (var col in cols)
    {
        var metadataValue = result.Metadata.Single(m => m.InstanceFieldName == col.ColumnName).Value;
        col.Format = (item) => @Html.Raw("<text>" + metadataValue + "</text>");
    }
}
}

@if ((this.Model != null) && (this.Model.SearchResults != null) && (this.Model.SearchResults.Count() > 0))
{   
    @grid.GetHtml(htmlAttributes: new { id = "documentGrid" }, rowStyle: "gridRow", alternatingRowStyle: "gridRowAlt", columns: cols)
}

私が解決しようとしているのは、最初に列を生成し、次にこれらの列に行を入力する方法と可能性です。

どんな助けでも本当にありがたいです、ありがとう、マーク

4

1 に答える 1

0

行に同じ値を入力しています。フォーマットを変更する必要があります。

col.Format = (item) => @Html.Raw(item.metadataValue);
于 2013-04-12T11:03:38.550 に答える