微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

主键为空时GridView显示查询数据但不显示所有数据

如何解决主键为空时GridView显示查询数据但不显示所有数据

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

我正在使用这个选择存储过程。如果存在指定的 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 )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。