在花了最后几天搜索之后,我正式陷入困境。我正在将一个对象绑定到 Telerik MVC 3 Grid,但问题是它需要动态创建列(不是自动生成的)。其中三列是已知的,其他列是未知的,这是棘手的部分。基本上,它可以像这些例子:
已知列1 | 已知列2 | 未知列1 | 已知列 3 已知列 1 | 已知列2 | 未知列1 | 未知列2 | 未知列3 | 已知列 3 等
因为我将未知列放在列表中(我也尝试过字典,所以我可以获取列名),这对我来说在绑定时很复杂。我的代码如下:
模型(可以有0到数百行,但是这个模型在List类型的视图模型中,也可以有0到20加上动态添加的列)
public class VendorPaymentsGLAccount
{
public string GeneralLedgerAccountNumber { get; set; }
public string GeneralLedgerAccountName { get; set; }
public string DisplayName { get { return string.Format("{0} - {1}", GeneralLedgerAccountNumber, GeneralLedgerAccountName); } }
public Dictionary<string, double> MonthAmount { get; set; }
public double Total { get { return MonthAmount.Sum(x => x.Value); } }
public List<string> Columns { get; set; }
public List<double> Amounts { get; set; }
public VendorPaymentsGLAccount() { }
}
查看(被注释掉的部分是试图使用字典)
<fieldset>
<legend>General Ledger Account Spend History</legend>
@if (Model.VendorPaymentsGLAccounts != null)
{
<br />
@(Html.Telerik().Grid(Model.VendorPaymentsGLAccounts)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(gl => gl.DisplayName).Title("General Ledger Account").Width(200).Filterable(false).Sortable(false);
//foreach (var month in Model.VendorPaymentsGLAccounts[0].MonthAmount)
//{
// //columns.Bound(gl => gl.MonthAmount[month.Key.ToString()].ToString()).Title(month.Key.ToString()).Width(100).Filterable(false).Sortable(false);
// //columns.Template(v => Html.ActionLink(v.VoucherID, "VoucherSummary", new { id = v.VoucherID, bu = v.BusinessUnitID, dtt = v.InvoiceDate.Ticks })).Title("Voucher").Width(100);
// columns.Template(gl => Html.ActionLink(gl.MonthAmount[month.Key.ToString()].ToString(), "VoucherSummary")).Title(month.Key.ToString()).Width(100);
//}
for (int i = 1; i <= (Model.VendorPaymentsGLAccounts[0].Columns.Count() - 1); i++)
{
string colTemp = Model.VendorPaymentsGLAccounts[0].Columns[i - 1];
columns.Template(gl => gl.Amounts[i - 1]).Title(colTemp).Width(100);
}
columns.Template(gl => String.Format("{0:C}", gl.Total)).Title("Total");
})
.Sortable()
.Pageable()
.Filterable()
.Footer(true))
}
else
{
<br />
@:There are no records that match your selected criteria.
}
</fieldset>
使用字典方法,我能够使用正确的标题文本正确生成列,但列的值(在我的测试中只有 2 列)是相同的。有人能帮忙吗?这似乎是一个奇怪的问题。只是想弄清楚如何正确地做到这一点。
更新:这是使用显示问题的字典方法的屏幕截图。列标题正确,但两个动态列的值相同。