After spending the last couple of days of searching, I am officially stuck. I am working on binding an object to a Telerik MVC 3 grid, but the trick is that it must have dynamically generated columns (not automatically generated). Three columns are known, the rest are unknown, and this is the hard part. Basically, it could be like these examples:
KnownColumn1 | KnownColumn2 | UnknownColumn1 | KnownColumn3 KnownColumn1 | KnownColumn2 | UnknownColumn1 | UnknownColumn2 | UnknownColumn3 | KnownColumn3 et al.
Because I put unknown columns on the list (I also tried the dictionary to get the column names), this has to do with complicated things for me when binding. My code is below:
Model (can be from zero to hundreds of lines, but this model is in the model of the List type, dynamic additions from 0 to 20 plus can also be added)
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() { } }
View (the section that commented was trying to use a dictionary)
<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>
Using the dictionary approach, I managed to correctly form the columns with the correct header text, but the values ββfor the columns (in my testing there were only 2 columns) were the same. Can anyone help with this? This seems to be a strange problem. Just trying to figure out how to do it right.
Update: here is a screenshot using a dictionary approach that shows the problem. The column headings are correct, but the values ββare the same for both dynamic columns.
