Telerik MVC-Netz mit Dynamischen Spalten zur Laufzeit aus einer Sammlung oder Wörterbuch

Nach den Ausgaben der letzten paar Tage Suche, bin ich offiziell stecken. Ich arbeite an einer Bindung ein Objekt der Telerik MVC-3-Raster, aber der Haken ist, dass es braucht, um dynamisch erstellte Spalten (nicht automatisch generiert). Drei Spalten sind bekannt, andere sind unbekannt, und das ist der schwierige Teil. Im Grunde, kann es sein, wie diese Beispiele:

KnownColumn1 | KnownColumn2 | UnknownColumn1 | KnownColumn3
KnownColumn1 | KnownColumn2 | UnknownColumn1 | UnknownColumn2 | UnknownColumn3 | KnownColumn3
etc.

Weil ich Stelle das unbekannte Spalten in einer Liste (habe ich versucht, ein Wörterbuch zu so kann ich die Spalten-Namen), hat sich dieser komplizierte Dinge für mich als verbindlich an. Mein code ist unten:

Modell (Es können auch null sein, um Hunderte von Zeilen, aber dieses Modell ist in einer Ansicht-Modell des Typs Liste, es können aber auch 0 bis 20 plus-Spalten, die dynamisch Hinzugefügt werden)

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() { }
}

Ansicht (Der Abschnitt, der auskommentiert wurde versucht, mit dem Wörterbuch)

<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>

Mit dem Wörterbuch Ansatz, ich war in der Lage, um die Spalten korrekt erzeugt mit dem richtigen header-text, aber die Werte für die Spalten (in meinem Test waren es nur 2 Spalten) waren die gleichen. Kann mir jemand helfen mit diesem? Dies scheint eine merkwürdige Frage. Nur versuchen, herauszufinden, wie Sie dies tun richtig.

Update: Hier ist ein Screenshot mit dem Wörterbuch Ansatz, der zeigt das Problem. Die Spaltenüberschriften werden korrekt, aber die Werte sind die gleichen für sowohl die dynamischen Spalten.

Telerik MVC-Netz mit Dynamischen Spalten zur Laufzeit aus einer Sammlung oder Wörterbuch

InformationsquelleAutor Eric Garrison | 2012-07-13

Schreibe einen Kommentar