Представьте такую ситуацию: на странице есть DropDownList и GridView. Изначально у DropDownList ничего не указано.В таком случае надо отобразить все значения из таблицы в GridView, а если в DropDownListвыбрано какое нибудь значение, то GridView надо отфильтровать это значение. Для SqlDatasource это можно решить так:
<asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:InlineConnectionString %>"
SelectCommand="SELECT Id,Name,Activate,Method,Type,TypeId FROM [Payment] where (ISNULL(TypeId,-1) = ISNULL(ISNULL(@TypeId, TypeId),-1)) ORDER BY [CreateDate] desc"
CancelSelectOnNullParameter="false">
Два момента:
1. (ISNULL(TypeId,-1) = ISNULL(ISNULL(@TypeId, TypeId),-1)) - тут получится условие TypeId=TypeId,когда в DropDownList не указано значение и TypeId=@TypeId, когда указано
2. CancelSelectOnNullParameter="false" - когда все параметры равны null, чтоб select все равно выполнился
Полный код выглядит так:
<div>
<asp:DropDownList ID="drdType" runat="server" AutoPostBack="true"
OnSelectedIndexChanged="UpdateGrid">
</asp:DropDownList>
</div>
<asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" AllowPaging="true"
PageSize="20" DataSourceID="SqlDataSource">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:InlineConnectionString %>"
SelectCommand="SELECT Id,Name,TypeId FROM [Table] where (ISNULL(TypeId,-1) = ISNULL(ISNULL(@TypeId, TypeId),-1))"
CancelSelectOnNullParameter="false">
<SelectParameters>
<asp:ControlParameter ControlID="drdType" Name="TypeId" PropertyName="SelectedValue" DbType="Int32" />
</SelectParameters>
</asp:SqlDataSource>