ここ数日検索に費やした後、私は公式に立ち往生しています。オブジェクトをTelerikMVC3グリッドにバインドする作業をしていますが、キャッチは、動的に作成された列(自動生成ではない)が必要なことです。3つの列は既知であり、他の列は不明であり、これは注意が必要な部分です。基本的に、次の例のようになります。
KnowColumn1 | KnowColumn2 | UnknownColumn1 | 既知の列3既知の列1| KnowColumn2 | UnknownColumn1 | UnknownColumn2 | UnknownColumn3 | KnowColumn3など。
不明な列をリストに入れているので(列名を取得できるように辞書も試しました)、これはバインド時に複雑なことをします。私のコードは以下の通りです:
モデル(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列しかありませんでした)は同じでした。誰かがこれを手伝うことができますか?これは奇妙な問題のようです。これを正しく行う方法を理解しようとしているだけです。
更新:これは、問題を示す辞書アプローチを使用したスクリーンショットです。列見出しは正しいですが、値は両方の動的列で同じです。