Asp.net GridView和SqlDataSoruce排序问题
我有非常基本的产品数据表,我将我的网格视图数据源设置为sqlDataSoruce,分页和排序选项为true 但我也有一个下拉列表,如果用户选择某个产品组(蔬菜、水果、冷冻食品等),网格视图只显示该产品组的项目Asp.net GridView和SqlDataSoruce排序问题,asp.net,sorting,gridview,Asp.net,Sorting,Gridview,我有非常基本的产品数据表,我将我的网格视图数据源设置为sqlDataSoruce,分页和排序选项为true 但我也有一个下拉列表,如果用户选择某个产品组(蔬菜、水果、冷冻食品等),网格视图只显示该产品组的项目 String sqlSearchByProduct = " SELECT ID, pID,pGroupID, pName, pPrice, Status, Stock FROM productsTable WHERE (pGroupID= ProductGroupIDDropDownLi
String sqlSearchByProduct = " SELECT ID, pID,pGroupID, pName, pPrice, Status, Stock FROM productsTable WHERE (pGroupID= ProductGroupIDDropDownList.SelectedItem.Value)";
sqlDataSource.SelectCommand = sqlSearchByProduct ;
网格显示从dropdownlist中选择的groupID中的所有产品,但问题是当我想按名称或价格对其排序时,网格视图再次显示所有产品
如果您知道如何解决此问题,我将不胜感激。
谢谢。您是否已将数据恢复到gridview,例如下面的
GridView1.DataBind();
您需要保留下拉列表的
SelectedValue
,最简单的方法是以声明方式绑定所有数据。大概是这样的:
<asp:DropDownList ID="ddCategory" runat="server" DataTextField="categoryname"
DataValueField="categoryid"
AppendDataBoundItems="true" DataSourceID="sqlCategory" AutoPostBack="true">
<asp:ListItem Value="0" Text="- Select -"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="sqlCategory" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindCnn %>"
SelectCommand="select categoryid,categoryname from dbo.categories">
</asp:SqlDataSource>
<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="False" AllowPaging="True" PageSize="5" DataKeyNames="ProductID" DataSourceID="sqlNWind">
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
<asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="sqlNWind" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindCnn %>"
SelectCommand="SELECT Products.ProductID, Products.ProductName FROM Products where (@categoryid=0 or CategoryID=@categoryId)">
<SelectParameters>
<asp:ControlParameter Name="categoryid" ControlID="ddCategory" Type="Int32" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
这种代码容易受到
SQL注入
攻击。始终使用参数。谢谢你,Alex,谢谢你的帮助,但是如果我有多个DropDownList,我该怎么办。“从(CategoryID=@CategoryID)或(Price<@Price)或(inStock=@stockStatusTrue)等产品中选择Products.ProductID、Products.ProductName。如果用户只选择两个选项如何。@Adil完全相同。将参数添加到SELECT
查询中,添加dropdownlist
s并将所有参数设置为AutoPostBack=“true”
。它们独立工作,将select
作为过滤器的总和进行过滤。将GridView
包装到UpdatePanel
中以获得更好的性能。“如果用户只选择两个选项如何”。请参阅如何在我的答案中构建where
子句。where(@categoryid=0/*未选择任何内容*/或categoryid=@categoryid)
是的,我做了,没有任何变化。相同的问题
" ... WHERE (pGroupID= ProductGroupIDDropDownList.SelectedItem.Value)"