双层嵌套GridView

展开前效果图:

 

 

 

展开后效果图:

 

 

 

 

 

JS(此部分最重要):

 <script type="text/javascript" language="javascript">

         var gridViewList = new Array();
        var objDiv;
        var objImageButton;
      function expandcollapse(obj,obj2)//obj是Div的ID  obj2是imageButton
        {
            var div = document.getElementById(obj);
            objDiv = obj;
            objImageButton = obj2;
                for(i=0;i<gridViewList.length;i++){
                    if(gridViewList[i].id==obj){//如果以及存在这个对象 则跳出
                        break;
                    }
                }
                if(i == gridViewList.length){//说明没有找到  则新加一个
                    var newObj = new Object();
                    newObj.id = obj;
                    newObj.buttonId=obj2.id;
                    if(div.style.display == null || div.style.display==""){
                    div.style.display = "none";//指定对象的可见状态
                        newObj.display = "none";
                       
                    }else{
                        newObj.display= div.style.display;
                    }
                    gridViewList.push(newObj);//记录这个对象
                }

                return true; 
               
       }

        function SetGridViewState(){//obj是Div的ID  obj2是imageButton
             
                for(i=0;i<gridViewList.length;i++){
                    if(gridViewList[i].id==objDiv){//如果以及存在这个对象 则改变该对象的显示状态
                        if(gridViewList[i].display == "none"){
                            document.getElementById(objDiv).style.display = "block";
                            document.getElementById(gridViewList[i].buttonId).src="../Images/Right/minus.gif";
                            gridViewList[i].display = "block";
                        }else{
                            document.getElementById(objDiv).style.display = "none";
                            gridViewList[i].display = "none";
                            document.getElementById(gridViewList[i].buttonId).src="../Images/Right/plus.gif";
                        }
                    }else{
                        document.getElementById(gridViewList[i].id).style.display =gridViewList[i].display;
                        if(gridViewList[i].display=="block")
                        {
                            document.getElementById(gridViewList[i].buttonId).src="../Images/Right/minus.gif";
                        }
                        else{
                            document.getElementById(gridViewList[i].buttonId).src="../Images/Right/plus.gif";
                        }
                    }
                }
            
        }
        function ClearState()
        {
            if(gridViewList!=null&&gridViewList.length>0)
            {
                 gridViewList.splice(0,gridViewList.length);
            }

        }
        function SetImageState(){

                for(i=0;i<gridViewList.length;i++){
                    var obj = document.getElementById(gridViewList[i].id);
                    var obj2 = document.getElementById(gridViewList[i].buttonId);
                    if(obj != null && obj2 != null){
                            if(gridViewList[i].display=="block")
                            {  
                                obj.style.display="block";
                                obj2.src="../Images/Right/minus.gif";// 链接“—”图片 表示已经展开 

                           }
                            else{
                                obj.style.display="none";
                                obj2.src="../Images/Right/plus.gif";链接“+”图片 用于展开第一层

                            }
                        }       
                }        
        }
    </script>

 

ASPX代码:

  <asp:GridView ID="GridProCost" CssClass="gridViewFold" runat="server" EmptyDataText="未查询到满足条件的数据"
                            GridLines="None" BorderStyle="Outset" AutoGenerateColumns="False" OnRowDataBound="GridProCost_RowDataBound"
                            OnRowCommand="GridProCost_RowCommand" OnPreRender="GridProCost_PreRender">
                            <Columns>
                                <asp:TemplateField>
                                    <ItemTemplate>
                                        <asp:ImageButton ID="ibtnProId" runat="server" ImageAlign="top" Width="11px" Height="11px"
                                            CssClass="imgStyle" ImageUrl="~/Images/Right/plus.gif" OnClick="btnPrject_Click"
                                            OnClientClick='<%# "expandcollapse(/"divClass"+ Eval("ProjectId")+"/",this)" %>'
                                            CommandArgument='<%# ((GridViewRow)Container).RowIndex %>' /> --绑定“+”表示可以展开, 绑定父GridView中数据的关键值  即ID
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="项目编号">
                                    <ItemTemplate>
                                        <asp:Label runat="server" ID="LblProjectNo" Text='<%# Bind("ProjectNo") %>'></asp:Label>
                                    </ItemTemplate>
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="项目名称">
                                    <ItemTemplate>
                                        <asp:HiddenField ID="HidProId" Value='<%# Eval("ProjectId")%>' runat="server" />
                                        <asp:Label ID="Label1" runat="server" Text='<%# CheckProjectName(Eval("ProjectName")) %>'></asp:Label>
                                    </ItemTemplate>
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="预计时间">
                                    <ItemTemplate>
                                        <asp:Label ID="Label4" runat="server" Text='<%# Bind("Plandate") %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle Width="180px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="责任人">
                                    <ItemTemplate>
                                        <asp:Label ID="Label5" runat="server" Text='<%# Bind("DutyPerson") %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle Width="60px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="审核状态">
                                    <ItemTemplate>
                                        <asp:Label ID="LblStatus" runat="server" Text='<%# CheckVerifyStatus(Eval("VerifyStatus")) %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle Width="60px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="执行状态">
                                    <ItemTemplate>
                                        <asp:Label runat="server" ID="Lbl2Status" Text='<%# CheckStatus(Eval("Status"))%>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle Width="60px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="期初金额(万元)">
                                    <ItemTemplate>
                                        <asp:Label ID="Label6" runat="server" Text='<%# SubMoney(Eval("MB")) %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Right" Width="100px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="拨入金额(万元)">
                                    <ItemTemplate>
                                        <asp:Label ID="Label7" runat="server" Text='<%# SubMoney(Eval("SumMD")) %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Right" Width="90px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="支出金额(万元)">
                                    <ItemTemplate>
                                        <asp:Label ID="Label2" runat="server" Text='<%# SubMoney(Eval("SumMC")) %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Right" Width="90px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="可用余额(万元)">
                                    <ItemTemplate>
                                        <asp:Label ID="Label8" runat="server" Text='<%# SubMoney(Eval("Bal")) %>'></asp:Label>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Right" Width="100px" />
                                    <HeaderStyle Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="操作">
                                    <ItemTemplate>
                                        <asp:LinkButton ID="LinkButton1" runat="server" CssClass="Updatebutton" CausesValidation="False"
                                            CommandName="Add1" CommandArgument='<%# ((GridViewRow)Container).RowIndex %>'
                                            OnClientClick='<%# "return AddCostRecord("+Eval("ProjectId")+")" %>' Text="添加"></asp:LinkButton>
                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Center" Width="60px" />
                                    <HeaderStyle HorizontalAlign="Center" Wrap="False" />
                                </asp:TemplateField>
                                <asp:TemplateField>  --将子GridView放在最后一列的模板中
                                    <ItemTemplate>
                                        <tr>
                                            <td colspan="100%" align="left" style="border: none;">
                                                <div id="divClass<%# Eval("ProjectId") %>" style="display: none; position: relative;
                                                    left: 15px; overflow: auto; width: 100%">
                                                    <asp:GridView ID="GridCostInfo" Width="97%" runat="server" OnRowDataBound="GridCostInfo_RowDataBound"
                                                        AutoGenerateColumns="False" ShowFooter="true" CssClass="gvFold" EmptyDataText="未查询到满足条件的数据">
                                                        <Columns>
                                                            <asp:TemplateField HeaderText="拨入金额(万元)">
                                                                <ItemTemplate>
                                                                    <asp:HiddenField ID="HidMB" runat="server" Value='<%# Bind("MB", "{0:f2}") %>' />
                                                                    <asp:Label ID="LblMD" runat="server" Text='<%# Bind("MD", "{0:f2}") %>'></asp:Label>
                                                                    <asp:HiddenField ID="HidCostId" Value='<%# Eval("CostId")%>' runat="server" />
                                                                    <asp:HiddenField ID="HidStatus2" runat="server" Value='<%# Bind("Status") %>' />
                                                                </ItemTemplate>
                                                                <HeaderStyle Wrap="False" />
                                                                <ItemStyle HorizontalAlign="Right" Width="100px" />
                                                            </asp:TemplateField>
                                                            <asp:TemplateField HeaderText="支出金额(万元)">
                                                                <ItemTemplate>
                                                                    <asp:Label ID="LblMC" runat="server" Text='<%# Bind("MC", "{0:f2}") %>'></asp:Label>
                                                                </ItemTemplate>
                                                                <HeaderStyle Wrap="False" />
                                                                <ItemStyle HorizontalAlign="Right" Width="100px" />
                                                            </asp:TemplateField>
                                                            <asp:TemplateField HeaderText="金额方向">
                                                                <ItemTemplate>
                                                                    <asp:Label ID="LblAR" runat="server" Text='<%# CheckAR(Eval("AR")) %>'></asp:Label>
                                                                </ItemTemplate>
                                                                <HeaderStyle Wrap="False" />
                                                            </asp:TemplateField>
                                                            <asp:TemplateField HeaderText="操作人">
                                                                <ItemTemplate>
                                                                    <asp:Label ID="LblOpt" runat="server" Text='<%# Bind("OptName") %>'></asp:Label>
                                                                </ItemTemplate>
                                                                <HeaderStyle Wrap="False" />
                                                            </asp:TemplateField>
                                                            <asp:TemplateField HeaderText="操作日期">
                                                                <ItemTemplate>
                                                                    <asp:Label ID="LblDate" runat="server" Text='<%# Bind("dDate","{0:yyyy-MM-dd}") %>'></asp:Label>
                                                                </ItemTemplate>
                                                                <HeaderStyle Wrap="False" />
                                                                <ItemStyle Width="100px" />
                                                            </asp:TemplateField>
                                                            <asp:TemplateField HeaderText="备注信息">
                                                                <ItemTemplate>
                                                                    <asp:Label ID="LblRemark" runat="server" Text='<%# Bind("Remark") %>'></asp:Label>
                                                                </ItemTemplate>
                                                                <HeaderStyle Wrap="False" />
                                                            </asp:TemplateField>
                                                        </Columns>
                                                    </asp:GridView>
                                                </div>
                                            </td>
                                        </tr>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>

 

 

 

ASPX.CS代码:

  /// <summary>
    /// 控制父GridView中展开子GridView
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnPrject_Click(object sender, EventArgs e)  --展开父GridView中某行数据,执行绑定子GridView
    {
        GridRowCount = int.Parse(((ImageButton)sender).CommandArgument.ToString());
        ImageButton IBProId = GridProCost.Rows[GridRowCount].Cells[0].FindControl("ibtnProId") as ImageButton;
            if (IBProId.ImageUrl.Contains("minus.gif"))
            {
                IBProId.ImageUrl = "~/Images/Right/plus.gif";
            }
            else
            {
                IBProId.ImageUrl = "~/Images/Right/minus.gif";
            }
            BindCostInfo();--绑定子GridView中的数据

            ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), DateTime.Now.ToString(),
            "<script language='javascript'>SetGridViewState();</script>", false);

        }

    protected void GridProCost_PreRender(object sender, EventArgs e)
    {
        ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), DateTime.Now.ToString(), "<script language='javascript'>SetImageState();</script>", false);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值