C# 过滤Gridview w/SQL&;命令参数

C# 过滤Gridview w/SQL&;命令参数,c#,sql,asp.net,gridview,webforms,C#,Sql,Asp.net,Gridview,Webforms,我有一个Gridview(GridView1),需要使用4个下拉列表进行过滤 现在我只想通过前两个选项进行筛选 卖方 DdlStore 我通过使用SQL查询来完成它 string query = "Select DISTINCT *, dbo.getsource(version, store_account) as source " + " FROM TABLENAME " + "

我有一个Gridview(GridView1),需要使用4个下拉列表进行过滤 现在我只想通过前两个选项进行筛选

卖方 DdlStore

我通过使用SQL查询来完成它

        string query = "Select DISTINCT *, dbo.getsource(version, store_account) as source " + 
                        " FROM TABLENAME " +
                        " WHERE (name=@name or @name = '') " +
                        " and (store_name=@Sname or @Sname = '') " + 
                        " and canceled = 0 " +
                        " and (trans_date between @start and @end) and User_id not in (45493,43020,45491) and internal_use = 0  " + 
                        " order by " + sort + " ";
如果你想知道所有额外的恶作剧是什么的话,过滤器目前会删除我们发送的所有测试订单

 using (SqlCommand cmd = new SqlCommand(query))
        {
           using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                cmd.Connection = con;
                using (DataTable dt = new DataTable())
                {
                    cmd.Parameters.AddWithValue("@name", DdlVendor.SelectedIndex > 0 ? DdlVendor.SelectedValue : "");
                    cmd.Parameters.AddWithValue("@Sname", DdlStore.SelectedIndex > 0 ? DdlStore.SelectedValue : "");
                    cmd.Parameters.AddWithValue("@start", start);
                    cmd.Parameters.AddWithValue("@end", end);
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
@Name和@Sname是我在前两个dropdownlists中使用的。问题是当我选择完我的值并应用它们时,GridView将毫无错误地变为空白

目标是通过在每个dropdownlist中选择的值过滤您在gridview中看到的内容

我会尽我所能澄清你的任何问题

这是我的一个下拉列表

<asp:DropDownList ID="DdlVendor" AppendDataBoundItems="True" runat="server" CssClass="form-control ftxt" PropertyName="SelectedValue" DataSourceID="SqlDataSource1" DataTextField="Name" DataValueField="Dist_num" AutoPostBack="True">
            <asp:ListItem Text="ALL" Value=""/>
        </asp:DropDownList>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DATABASE %>" SelectCommand="SELECT DISTINCT [Name], [Dist_num] FROM [VIEWNAME]"></asp:SqlDataSource>

这是我的GridView,以Boundfield为例

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" Width="100%"  CssClass="main-table"  AutoGenerateColumns="False">

<asp:BoundField DataField="Name" HeaderText="Vendor" ItemStyle-Width="80px" SortExpression="Name" />

我找到了解决方案

我一直在尝试将字母值存储为数值

所以通过改变

"WHERE (name=@name or @name = '') " +

Gridview过滤效果很好。与第二个查询相同

" and (store_name=@Sname or @Sname = '') " +

我找到了解决办法

我一直在尝试将字母值存储为数值

所以通过改变

"WHERE (name=@name or @name = '') " +

Gridview过滤效果很好。与第二个查询相同

" and (store_name=@Sname or @Sname = '') " +


当GridView重新绑定为空时,通常意味着选择失败。您是否使用强制输入测试了select语句?i、 在SSMS中使用声明和设置的变量运行它?我没有想到这一点。我通常没有访问表和视图的权限。我只使用给我的东西。我可以试一试。当GridView重新绑定为空时,通常意味着选择失败。您是否使用强制输入测试了select语句?i、 在SSMS中使用声明和设置的变量运行它?我没有想到这一点。我通常没有访问表和视图的权限。我只使用给我的东西。我可以试一试。