过滤某些项目可能会或可能不会被选中的语法

时间:2018-02-09 21:23:52

标签: c# sql sql-server code-behind

我的asp.net表单上有3个下拉框:国家,州和城市。我想用这些来过滤我的数据。但是,我还希望用户能够不使用过滤器,或者不使用所有过滤器。

例如,他们可能根本不想过滤。或者他们可能只想按国家/地区进行过滤。或者只有国家/州。或者,如果它不是美国,那么按国家/城市。

我被困在如何写这个。现在我有:

 SqlDataAdapter adapter = new SqlDataAdapter("Select * from [MOS_Role] where [Country_ID] = @CoID AND [State_ID] = @StID AND [City_ID] = @CiID ORDER BY [Role] ASC", con2);
 adapter.SelectCommand.Parameters.AddWithValue("@CoID", Convert.ToInt32(ddlCountry.SelectedValue));
 adapter.SelectCommand.Parameters.AddWithValue("@StID", Convert.ToInt32(ddlState.SelectedValue));
 adapter.SelectCommand.Parameters.AddWithValue("@CiID", Convert.ToInt32(ddlCity.SelectedValue));

但是当您未选中下拉列表时,这不起作用。

2 个答案:

答案 0 :(得分:0)

以下是可以帮助您的查询

Select * from [MOS_Role]
where ([Country_ID] = @CoID OR @CoID IS NULL)
AND ([State_ID] = @StID OR @StID IS NULL)
AND ([City_ID] = @CiID OR @CiID IS NULL)
ORDER BY [Role] ASC

您应该作为参数选择值传递,如果未选择则传递null

答案 1 :(得分:0)

您需要先检查它是否为空,然后添加。为每个AddWithValue电话执行此操作:

if (!string.IsNullOrWhiteSpace(ddlCountry.SelectedValue))
    adapter.SelectCommand.Parameters.AddWithValue("@CoID", Convert.ToInt32(ddlCountry.SelectedValue));