GridView显示查询到的数据,但当主键为null时不显示所有数据

GridView shows queried data but does not show all data when primary key is null

我正在尝试在 GridView 中显示所有 Funder 信息,并且还能够过滤它们。截至目前,如果我在 URL 中硬编码 FunderId=somenumber,它会显示数据。但是当数据为空时,它什么都不显示,而程序告诉它显示每个 FunderId 的所有数据。

我正在使用这个 select 存储过程。如果有指定的 FunderId,则显示该 FunderId 的数据。如果没有指定 FunderId,显示所有资助者的数据。

ALTER PROCEDURE [dbo].[spFunderId_Select]
    @FunderId int = NULL 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT * 
    FROM vueFunders 
    WHERE ([FunderId] = @FunderId OR @FunderIdIS NULL) 
END

这是 aspx 标记:

<asp:GridView ID="gvFunderData" runat="server" AutoGenerateColumns="False"
     DataSourceID="sdsFunders"
     ForeColor="#333333" GridLines="None"
     CssClass="GridView"
     PagerStyle-CssClass="pgr"
     ShowFooter="true"
     AlternatingRowStyle-CssClass="alt" AllowPaging="true"
     PageSize="20" AllowSorting="true"
     EmptyDataText="There are no data records to display."">

            <Columns>
                <%--FnderId--%>
                <asp:TemplateField HeaderText="FunderId" SortExpression="FunderId">
                    <ItemTemplate>
                        <asp:Label ID="lblFunderId" runat="server" Text='<%# Eval("FunderId") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>


                <%--Money--%>
                <asp:TemplateField HeaderText="Money" SortExpression="Money">
                    <ItemTemplate>
                        <asp:Label ID="lblMoney" runat="server" Text='<%# Eval("Money")%>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>


                <%--BankName--%>
                <asp:TemplateField HeaderText="NameOfBank" SortExpression="NameOfBank">
                    <ItemTemplate>
                        <asp:Label ID="lblNameOfBank" runat="server" Text='<%#Eval("NameOfBank") %>'></asp:Label>
                    </ItemTemplate>
                  
                </asp:TemplateField>
            </Columns>
        </asp:GridView>


  <asp:SqlDataSource ID="sdsFunders" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseLive %>"
        SelectCommandType="StoredProcedure"
        SelectCommand="spFunderId_Select">
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="0" Name="FunderId" QueryStringField="FunderId" Type="Int32"/>
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="FunderId" DbType="Int32" />
            <asp:Parameter Name="Money" DbType="Int32" />
            <asp:Parameter Name="NameOfBank" DbType="String" />
        </UpdateParameters>
    </asp:SqlDataSource>

当然,如果我注释掉 QueryStringParameter,它会显示所有资助者的所有数据,但是你无法过滤它,因为你无法查询 FunderId。感谢所有帮助!

试试这个

SELECT  * FROM vueFunders WHERE (   @FunderId IS NULL OR  @FunderId = 0 OR [FunderId] = @FunderId )