5

DropDownList と Telerik の Kendo UI Grid Control を含むページがあります。初めてページを開いたとき、DropDownList にはアイテムが選択されていません。ユーザーが DropDownList のみで値を選択すると、Grid はサーバーに対して Ajax 呼び出しを行い、対応するデータをロードする必要があります。

ユーザーが DropDownList の項目を選択すると、私のコードは正常に動作しますが、問題は、ページが初めて開かれたときに、DropDownList に値がなく、Grid がサーバーを呼び出すべきではないことです。

私の質問は、DropDowList でアイテムが選択されていない場合、グリッドがサーバーを呼び出さないようにするにはどうすればよいですか?

    <div>
@Html.Kendo().DropDownList().Name("broker").DataTextField("GrandParentName").DataValueField("Id").BindTo(Model).SelectedIndex(@selectedIndex).Events(e => e.Change("brokerChanged"))
    </div>

    @(Html.Kendo().Grid<OrderViewModel>()
          .Name("Orders")
          .HtmlAttributes(new {style = "height: 500"})
          .Columns(c =>
              {
                  c.Bound(p => p.Id)
                      .Width(50)
                      .Title("")
                      .Sortable(false)
                      .IncludeInMenu(false)
                      .ClientTemplate((@Html.ActionLink("Edit", "Index", "Splits", new {Id = "OrderId"}, null).ToHtmlString().Replace("OrderId", "#=Id#")));
                  c.Bound(p => p.TradeDate)
                      .Title("Trd Dt")
                      .Format("{0:d}")
                      .Width(90)
                      .HtmlAttributes(new {style = "text-align: right"});
                  c.Bound(p => p.Price)
                      .Title("Price")
                      .Format("{0:n}")
                      .Width(100)
                      .HtmlAttributes(new {style = "text-align: right"});
                  c.Bound(p => p.Status)
                      .Title("Status");
                  c.Bound(p => p.Notional)
                      .Title("Notional")
                      .Format("{0:n}")
                      .HtmlAttributes(new {style = "text-align: right"});
              })
          .Sortable()
          .Scrollable()
          .ColumnMenu()
          .Pageable(x =>
              {
                  x.Enabled(true);
                  x.PreviousNext(false);
                  x.PageSizes(false);
                  x.Info(true);
                  x.Input(false);
                  x.Numeric(false);
                  x.Refresh(true);
                  x.Messages(y => y.Display("{2} Order(s)"));
              })
          .Resizable(resize => resize.Columns(true))
          .Reorderable(reoder => reoder.Columns(true))
          .DataSource(ds => ds.Ajax()
                            .ServerOperation(false)
                            .Read(read => read.Action("Action", "MyController").Data("selectedBrokerId")))
          )

<script type="text/javascript">
    function brokerChanged() {
        var grid = $("#Orders").data("kendoGrid");
        grid.dataSource.read();
    }

    function selectedBrokerId() {
        var obj = { brokerId: $("#broker").data("kendoDropDownList").value() };

        return obj;
    }
</script>

お時間をいただき、ありがとうございました。

4

1 に答える 1

5

グリッドの自動バインド機能があります。これを使用して、ページが最初に読み込まれたときに読み取るかどうかを決定できます。これは機能するはずです(selectedIndexがドロップダウン値が選択されているかどうかを判断すると仮定します):

@(Html.Kendo().Grid<OrderViewModel>()
      .Name("Orders")
      .HtmlAttributes(new {style = "height: 500"})
      .AutoBind(selectedIndex > 0) 
      //rest of your grid declaration 
于 2012-10-23T04:22:45.320 に答える