问题描述
我正在尝试在 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 )