Использование фильтров с gridview и хранимыми процедурами в ASP.NET и C # - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть сетка, заполненная хранимой процедурой.В этом наборе данных пользователь должен иметь возможность отфильтровать его, выбрав LabID и / или SiteName из 2 раскрывающихся списков.Каков наилучший способ сделать это?

    <asp:DropDownList ID="ddlLabIDs" runat="server" AutoPostBack="True" 
        DataSourceID="SqlDataSource2" DataTextField="LabID" 
        DataValueField="LabID" AppendDataBoundItems="True">
    </asp:DropDownList>
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 
        SelectCommand="exec usp_LabIDs_Select;"></asp:SqlDataSource>

    <asp:DropDownList ID="ddlSiteNames" runat="server" 
        DataSourceID="SqlDataSource3" DataTextField="SiteName" 
        DataValueField="SiteName" AppendDataBoundItems="True" 
        AutoPostBack="True">
    </asp:DropDownList>
    <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 
        SelectCommand="exec usp_SiteNames_Select;"></asp:SqlDataSource>

    <asp:GridView ID="AllDataFlat" runat="server" AllowPaging="True" PageSize="20"
        AllowSorting="True" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1">
        <Columns>
            <asp:BoundField DataField="LabID" HeaderText="LabID" SortExpression="LabID" />
            <asp:BoundField DataField="SiteName" HeaderText="SiteName" 
                SortExpression="SiteName" />
            <asp:BoundField DataField="StartDateTime" HeaderText="StartDateTime" 
                SortExpression="StartDateTime" />
            <asp:BoundField DataField="FilterNumber" HeaderText="FilterNumber" 
                SortExpression="FilterNumber" />
            <asp:BoundField DataField="AmtWaterFiltered" HeaderText="AmtWaterFiltered" 
                ReadOnly="True" SortExpression="AmtWaterFiltered" />
            <asp:BoundField DataField="WaterTemp" HeaderText="WaterTemp" ReadOnly="True" 
                SortExpression="WaterTemp" />
            <asp:BoundField DataField="pH" HeaderText="pH" SortExpression="pH" />                
        </Columns>           
    </asp:GridView>        

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 
        SelectCommand="exec usp_AllDataFlat_Select;">
    </asp:SqlDataSource>

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

Наиболее эффективный способ сделать это - передать значения, выбранные в раскрывающихся элементах управления, в хранимую процедуру usp_AllDataFlat_Select.В этой хранимой процедуре вы сможете выбрать только те строки, которые соответствуют значениям фильтра.

Если у вас нет доступа к хранимым процедурам (вы не можете их изменить), то, по моему мнению, лучший способдобиться этого - обернуть ваш вызов хранимой процедуры в объект, который извлекает все строки из базы данных и фильтрует их в памяти (не очень эффективно).Затем вы можете использовать OnjectDataSource вместо SqlDataSource для заполнения сетки.Этот ObjectDataSoruce может вызывать методы объекта, который упаковывает ваши хранимые процедуры.

Вы можете найти пример здесь .В этом примере вместо хранимых процедур используются запросы, но замена запросов вызовами хранимых процедур должна быть тривиальной.

Удачи,

0 голосов
/ 02 ноября 2011

вы можете попробовать вот так .....

ПРИМЕЧАНИЕ: это всего лишь пример того, как фильтровать представление сетки с выбранными значениями в двух выпадающих списках ...

<%@ page autoeventwireup="true" codefile="FilterWithMultipleDropDownLists.aspx.cs"
        inherits="GridView_FilterWithMultipleDropDownLists" language="C#" masterpagefile="~/MasterPages/Default.master"
        title="GridView: Filter With Multiple DropDownLists" %>

<asp:content id="Content1" runat="Server" contentplaceholderid="ContentPlaceHolder1">
        <div>
                Select Supplier:
                <asp:dropdownlist id="ddlSuppliers" runat="server" appenddatabounditems="True" autopostback="True"
                        datasourceid="sdsSuppliers" datatextfield="CompanyName" datavaluefield="SupplierID">
                        <asp:listitem text="All Suppliers" value="-1">
                        </asp:listitem>
                </asp:dropdownlist>
                <asp:sqldatasource id="sdsSuppliers" runat="server" connectionstring="<%$ ConnectionStrings:NorthwindConnectionString %>"
                        selectcommand="SELECT [SupplierID], [CompanyName] FROM [Suppliers] ORDER BY [CompanyName]">
                </asp:sqldatasource>
        </div>
        <div style="margin-top: 12px;">
                Select Category:
                <asp:dropdownlist id="ddlCategories" runat="server" appenddatabounditems="True" autopostback="True"
                        datasourceid="sdsCategories" datatextfield="CategoryName" datavaluefield="CategoryID">
                        <asp:listitem text="All Categories" value="-1">
                        </asp:listitem>
                </asp:dropdownlist>
                <asp:sqldatasource id="sdsCategories" runat="server" connectionstring="<%$ ConnectionStrings:NorthwindConnectionString %>"
                        selectcommand="SELECT [CategoryID], [CategoryName] FROM [Categories] ORDER By [CategoryName]">
                </asp:sqldatasource>
        </div>
        <asp:gridview id="gvProducts" runat="server" autogeneratecolumns="False" datakeynames="ProductID"
                datasourceid="sdsProducts" style="margin-top: 24px;">
                <columns>
                        <asp:boundfield datafield="ProductID" headertext="ProductID" insertvisible="False"
                                readonly="True" sortexpression="ProductID" />
                        <asp:boundfield datafield="ProductName" headertext="ProductName" sortexpression="ProductName" />
                        <asp:boundfield datafield="CompanyName" headertext="Supplier" sortexpression="CompanyName" />
                        <asp:boundfield datafield="CategoryName" headertext="Category" sortexpression="CategoryName" />
                </columns>
        </asp:gridview>
        <asp:sqldatasource id="sdsProducts" runat="server" connectionstring="<%$ ConnectionStrings:NorthwindConnectionString %>"
                selectcommand="SELECT [P].[ProductID], [P].[ProductName], [P].[SupplierID], [P].[CategoryID], [S].[CompanyName], [C].[CategoryName] FROM [Products] AS [P] INNER JOIN [Suppliers] AS [S] ON [S].[SupplierID] = [P].[SupplierID] INNER JOIN [Categories] AS [C] ON [C].[CategoryID] = [P].[CategoryID] WHERE ([P].[SupplierID] = CASE WHEN @SupplierID = -1 THEN [P].[SupplierID] ELSE @SupplierID END AND [P].[CategoryID] = CASE WHEN @CategoryID = -1 THEN [P].[CategoryID] ELSE @CategoryID END) ORDER BY [P].[ProductName]">
                <selectparameters>
                        <asp:controlparameter controlid="ddlSuppliers" name="SupplierID" propertyname="SelectedValue" type="Int32" />
                        <asp:controlparameter controlid="ddlCategories" name="CategoryID" propertyname="SelectedValue" type="Int32" />
                </selectparameters>
        </asp:sqldatasource>
</asp:content>    

Я надеюсь, что это поможет вам ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...