【问题标题】:Checking if a aspxgridview Master-Detail has any row checked in Client Side检查 aspxgridview Master-Detail 是否在客户端检查了任何行
【发布时间】:2016-11-09 19:13:14
【问题描述】:

我需要检查 Master-Detail AspxGridView 中是否检查了任何行。

与主人我可以使用

grid.GetSelectedRowCount()>0

但是如何使用 JS 与详细行进行检查呢?

提前致谢

【问题讨论】:

  • 尝试var selected = DetailGrid.GetSelectedKeysOnPage()方法,返回所有可以在回调或回发时处理的关键字段值。
  • 它不起作用,它说它没有定义。 detailGridView 没有唯一的 ID,因为它是父级的一部分,可以有多个网格

标签: javascript devexpress aspxgridview


【解决方案1】:

要做到这一点,您需要为每个详细信息网格分配一个唯一的 ClientInstanceName,然后使用分配的 ClientInstanceName 在客户端访问该特定的详细信息网格,该名称又应包括主网格行 ID 部分,即第一行的 detailGrid_1 , detailGrid_2 为第二个,依此类推。

要将 ClientInstanceName 分配给每个详细信息网格,您需要将自定义 Page_Init 处理程序添加到详细信息网格,作为代码隐藏中该处理程序中的设置 ClientInstanceName。

因此,网络定义可能如下所示:

<dx:ASPxGridView ID="masterGrid" runat="server" ClientInstanceName="masterGrid">
...
<Templates>
   <DetailRow>
      <dx:ASPxGridView ID="detailGrid" runat="server" OnInit="detailGrid_OnInit">
         ...
      </dx:ASPxGridView>
   </DetailRow>
</Templates>
...
</dx:ASPxGridView>

然后在代码隐藏中:

protected void detailGrid_OnInit(object sender, EventArgs e) {
    ASPxGridView detailGridView = (ASPxGridView)sender;
    GridViewDetailRowTemplateContainer templateContainer =
                   (GridViewDetailRowTemplateContainer)detailGridView.NamingContainer;
    detailGridView.ClientInstanceName = string.Format("detailGrid_{0}",
                                             templateContainer.VisibleIndex);
}

然后在您的事件处理程序中的客户端(您没有提到您尝试检查哪个事件,如果详细网格选择了一些行),您需要获取主网格的行 ID 并为您的手动详细网格,例如:

eval('detailGrid_' + master_grids_row_id).

或者您可以将它以现成的形式传递给 JS 甚至处理程序,如下文所示。

一旦你有了正确的 detailGrid 客户端实例名称,你就可以调用下面的 JS 方法:

detailGrid_XX.GetSelectedKeysOnPage();

有关一些代码示例,请参阅此 DX 支持文章:https://www.devexpress.com/Support/Center/Question/Details/Q450479

HTH

【讨论】:

  • 太棒了!很高兴它有帮助:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 2016-05-19
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
相关资源
最近更新 更多