2

Telerikグリッドコントロールに表示するデータを取得するのに問題があります。GraphDetailViewModelにリストオブジェクトを入力します。次に、を使用Model.GraphDetailしてデータをビューのグリッドにバインドしてみます。プロジェクトはエラーなしでコンパイルおよび実行され、グリッドは表示されますが空です。コードをステップスルーすると、にデータが入力されていることがわかりGraphDetailます。

これが私のViewModelです:

namespace AESSmart.ViewModels
{
    public class ACVoltagesTelerikGraph
    {
        public long InverterID { get; set; }
        public string InverterName { get; set; }
        public double? voltage_ac_a { get; set; }
        public double? voltage_ac_b { get; set; }
        public double? voltage_ac_c { get; set; }
        public DateTime recordTime { get; set; }
    }

    public class GraphsACVoltagesViewModel
    {
        public DateTime startingDate { get; set; }
        public DateTime endingDate { get; set; }

        public string HCSeries { get; set; }
        public List<ACVoltagesTelerikGraph> GraphDetail { set; get; }

        public void setLists()
        {
            //Code to populate InverterGoups and Inverters
        }

        public void setSeries()
        {
            //Code to populate GraphDetail and HCSeries
        }
    }
}

マイビューには、グリッドを表示するための次のコードが含まれています。

@model AESSmart.ViewModels.GraphsACVoltagesViewModel

@(Html.Telerik().Grid(Model.GraphDetail)
    .Name("Grid")
    .DataBinding(dataBinding => dataBinding.Server())
    .Columns(columns =>
    {
        columns.Bound(o => o.InverterID).Title("InverterID").Width(25);
        columns.Bound(o => o.InverterName).Title("InverterName").Width(100);
        columns.Bound(o => o.voltage_ac_a).Title("Phase 1 Volts").Width(75);
        columns.Bound(o => o.voltage_ac_b).Title("Phase 2 Volts").Width(75);
        columns.Bound(o => o.voltage_ac_c).Title("Phase 3 Volts").Width(75);
        columns.Bound(o => o.recordTime).Title("Record Time").Width(150);
    })
    .Groupable()
    .Sortable()
    .Filterable()
    .Pageable(pager => pager.PageSize(3))
)

結果のスクリーンショットは次のとおりです。 ここに画像の説明を入力してください

スクリーンショットからわかるように、グリッドは空です。 では、ViewModelにあるGraphDetailリストをグリッドに適切にバインドするにはどうすればよいですか?

4

2 に答える 2

4

私は実際に非常によく似た問題に遭遇しました。リストに基づいてグラフを作成できませんでした。それを修正するために、私はリストをコレクションに変更しなければなりませんでした。シナリオには次のコードを使用してみてください。

public virtual ICollection<ACVoltagesTelerikGraph> GraphDetail { set; get; }

また、ViewModelのより大きなクラスの一部としてデータを構築しているようです。したがって、グリッドが使用しているモデルの作成をコントローラーが排他的に処理することはありません。したがって、「サーバーバインディング」はおそらく機能しません。言うまでもなく、データをユーザーに表示しようとしているだけで、ユーザーがデータを変更する必要はまったくないようです。したがって、クライアント側で次のようにデータバインドします。

@(Html.Telerik().Grid(Model.GraphDetail)
    .Name("Grid")
    .DataBinding(dataBinding => dataBinding
        .Ajax()
        .OperationMode(GridOperationMode.Client)           
    )
于 2012-09-18T15:31:21.910 に答える
0

これを変更してみてください:

@(Html.Telerik().Grid(Model.GraphDetail)

.DataBinding(dataBinding => dataBinding.Server())

これに:

@(Html.Telerik().Grid<ACVoltagesTelerikGraph>()

.DataBinding(dataBinding => dataBinding.Ajax().Select("ActionName", "ControllerName"))

于 2012-09-13T19:16:46.637 に答える