如何使SQL查询仅在用户“展开”时触发?gridviewrow

本文关键字:gridviewrow 展开 SQL 何使 查询 用户 | 更新日期: 2023-09-27 18:10:58

目前,我有一个GridView,从SQL数据源拉。每行都有一个摘要,当用户单击行上的expand时,他们会得到一个DetailsView,其中包含该特定项目的详细信息。

我正在寻找一种方法,使其使DetailsView仅绑定到数据源时,行展开。目前它发生在RowDataBound上,这导致SQL服务器和asp.net服务器之间来回传递大量查询。

我还想使用Bootstrap来展开和折叠这些行,所以当它展开或折叠时看起来很好。

任何帮助将是非常感激:)我真的试图找到一些资源,可以帮助我在上面,但我遇到了磕磕绊绊。我得到的最接近的是一个AJAX折叠面板,但它加载一切在Page_Load。

如何使SQL查询仅在用户“展开”时触发?gridviewrow

您在这里与两个不同的领域作斗争,这条评论使它变得更加复杂:

我还想使用Bootstrap展开和折叠这些行,这样当它展开或折叠时看起来很好。<</p>

我所做的是使用BS面板和重复器,使用这种方法,您仍然可以在单击事件上绑定详细信息,但您需要在项目模板中隐藏一些控件,以便DetailsView绑定正确的数据。当你"循环"你的摘要数据时,你需要提供一个精确的链接到BS扩展子-可能是一个标识符,然后是另一个隐藏的控件。在服务器上运行链接,这样你就可以有一个点击事件,并在那里分配数据源和数据绑定。

根据加载数据所需的时间,您可以考虑避免每次点击都进行数据绑定。如果你正在使用BS来使它变得优雅,那么添加回发似乎会适得其反——至少在用户体验/优雅方面是这样。我理解为什么要避免这么多的数据调用。

希望这能让你开始:

<asp:Repeater ID="RepeatCont" runat="server" ClientIDMode="Static">
<HeaderTemplate>
    <div class="panel-inner">
        <div class="panel-group" id="accCont"> // parent
</HeaderTemplate>
<ItemTemplate>
    <div class="panel panel-dark-gray">
        <div class="panel-heading">
            <h5 class="panel-title">
                <a class="panel-toggle" data-toggle="collapse" data-parent="#accCont" href='<%# "#" + Eval("MATCHID1") %>'>  // add a postback here with linkbutton or javascript postback force - easier just do bind your child data because you'll have two different trying to happen - postback and data-toggle
                    <div>
                       //stuff on the panel
                    </div>
                    <div class="clearfix">
                        <br />
                    </div>
                </a>
            </h5>
        </div>           
        <div id='<%# Eval("MATCHID1") %>' class="panel-body collapse">
           //Hidden label with your MATCH ID 1 again - this is where you will tell your DetailsView to look for parameter
           //put your details view here
        </div>
    </div>
</ItemTemplate>
<FooterTemplate>
    </div>
 </div>
</FooterTemplate>