我想要实现的目标很难解释,所以如果我能提供更多信息,请告诉我。我有一种感觉,我试图超越他们的方式使用WebGrids,所以如果任何人有任何开源替代品可以做我正在尝试的东西,那也会有所帮助。
我需要从头开始构建一个WebGrid,因为返回给它的内容(列和值)会根据我表单上的其他条件而改变。我在Table中使用了几行简单的代码,但我想使用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)
}
我想要解决的是如何以及如果可能首先生成列,然后将行填充到这些列中。
非常感谢任何帮助,谢谢,Mark
答案 0 :(得分:0)
您输入的行具有相同的值,您应该更改格式:
col.Format = (item) => @Html.Raw(item.metadataValue);