实现AspxGridView主从表选择行状态保持

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register assembly="DevExpress.Web.v14.1, Version=14.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxGridView" tagprefix="dx" %>
<%@ Register assembly="DevExpress.Web.v14.1, Version=14.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxEditors" tagprefix="dx" %>

<%@ Register assembly="DevExpress.Web.v14.1, Version=14.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web.ASPxHiddenField" tagprefix="dx" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function ProcessSelection(grid, visibleIndex, checkbox, keyValue, hiddenField) {
            if (checkbox.GetChecked()) {
                grid.SelectRowOnPage(visibleIndex);
                if (!hiddenField.Contains("key"+keyValue.toString())) {
                    hiddenField.Add("key"+keyValue.toString(), true);
                }
            }
            else 
            {
                grid.UnselectRowOnPage(visibleIndex);
                if (hiddenField.Contains("key"+keyValue)) {
                    hiddenField.Remove("key"+keyValue.toString());
                }
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    <dx:aspxgridview ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="AccessDataSource1" KeyFieldName="CategoryID" ClientInstanceName="masterGrid">
        <templates>
            <detailrow>
                  <dx:aspxgridview ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" 
                        DataSourceID="AccessDataSource2" KeyFieldName="ProductID" 
                      onbeforeperformdataselect="ASPxGridView1_BeforePerformDataSelect" 
                      oninit="ASPxGridView1_Init" ondatabound="ASPxGridView1_DataBound">
                      <columns>
                          <dx:gridviewdatatextcolumn FieldName="ProductID" VisibleIndex="1">
                          </dx:gridviewdatatextcolumn>
                          <dx:gridviewdatatextcolumn FieldName="ProductName" VisibleIndex="2">
                          </dx:gridviewdatatextcolumn>
                          <dx:gridviewdatatextcolumn FieldName="UnitPrice" VisibleIndex="3">
                          </dx:gridviewdatatextcolumn>
                          <dx:gridviewdatatextcolumn Caption="#" Name="Selection" VisibleIndex="0">
                              <dataitemtemplate>
                                  <dx:aspxcheckbox ID="detailSelectCheckbox" runat="server" 
                                      oninit="detailSelectCheckbox_Init">
                                  </dx:aspxcheckbox>
                              </dataitemtemplate>
                          </dx:gridviewdatatextcolumn>
                      </columns>
                  </dx:aspxgridview>
            </detailrow>
        </templates>
        <settingspager PageSize="4">
        </settingspager>
        <columns>
            <dx:gridviewdatatextcolumn FieldName="CategoryID" ReadOnly="True" 
                VisibleIndex="1">
                <editformsettings Visible="False" />
            </dx:gridviewdatatextcolumn>
            <dx:gridviewdatatextcolumn FieldName="CategoryName" VisibleIndex="2">
            </dx:gridviewdatatextcolumn>
            <dx:gridviewdatatextcolumn FieldName="Description" VisibleIndex="3">
            </dx:gridviewdatatextcolumn>
          
        </columns>
        <settingsdetail ShowDetailRow="True" />
    </dx:aspxgridview>
    <asp:accessdatasource ID="AccessDataSource1" runat="server" 
        DataFile="~/App_Data/nwind.mdb" SelectCommand="SELECT * FROM [Categories]">
    </asp:accessdatasource>
     <asp:accessdatasource ID="AccessDataSource2" runat="server" 
        DataFile="~/App_Data/nwind.mdb" 
        SelectCommand="SELECT [ProductID], [ProductName], [CategoryID], [UnitPrice] FROM [Products] WHERE ([CategoryID] = ?)">
         <selectparameters>
             <asp:sessionparameter Name="CategoryID" SessionField="CategoryID" 
                 Type="Int32" />
         </selectparameters>
    </asp:accessdatasource>
    <dx:aspxhiddenfield ID="masterSelection" ClientInstanceName="masterSelection" runat="server">
    </dx:aspxhiddenfield>
      <dx:aspxhiddenfield ID="detailSelection" ClientInstanceName="detailSelection" runat="server">
    </dx:aspxhiddenfield>
    
   
    </form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web.ASPxGridView;
using DevExpress.Web.ASPxEditors;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    #region "Set master grid"
       
    #endregion

    #region "Set detail grid"
    protected void ASPxGridView1_BeforePerformDataSelect(object sender, EventArgs e)
    {
        Session["CategoryID"] = ((ASPxGridView)sender).GetMasterRowKeyValue();
    }

    protected void ASPxGridView1_DataBound(object sender, EventArgs e)
    {
        ((ASPxGridView)sender).ClientInstanceName = "detailGrid" + ((ASPxGridView)sender).GetMasterRowKeyValue().ToString();

        for (int i = 0; i < ((ASPxGridView)sender).VisibleRowCount; i++)
        {
            string key = ((ASPxGridView)sender).GetRowValues(i, "ProductID").ToString();
            if (detailSelection.Contains("key" + key))
            {
                ((ASPxGridView)sender).Selection.SelectRow(i);
            }
        }
    }
    protected void ASPxGridView1_Init(object sender, EventArgs e)
    {
        ((ASPxGridView)sender).ClientInstanceName = "detailGrid" + ((ASPxGridView)sender).GetMasterRowKeyValue().ToString();

    }

   
   #endregion

    #region "Set select checkbox"
    protected void detailSelectCheckbox_Init(object sender, EventArgs e)
    {
        GridViewDataItemTemplateContainer c = ((ASPxCheckBox)sender).NamingContainer as
    GridViewDataItemTemplateContainer;
        int index = c.VisibleIndex;
        string key = c.KeyValue.ToString();
        string ownerGridClientInstanceName = c.Grid.ClientInstanceName;

        ((ASPxCheckBox)sender).ClientSideEvents.CheckedChanged = "function(s,e){ProcessSelection(" +
            ownerGridClientInstanceName + "," + index + ",s," + key + ",detailSelection);}";

        if (c.Grid.Selection.IsRowSelected(index))
        {
            ((ASPxCheckBox)sender).Checked = true;
        }
    }
    #endregion

   
 
  

   
}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值