【发布时间】:2015-05-13 04:55:42
【问题描述】:
我想使用两个 CheckBoxList 过滤数据,结果必须显示在一个 GridView 中。我的数据存储在 SQL Server 数据库中。 我已经完成了一些代码,但它不起作用,当我检查一些框时没有任何反应。 这是我的代码
public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindList();
}
}
protected void gvDemo_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvDemo.PageIndex = e.NewPageIndex;
BindList();
}
private void BindList()
{
string conString = ConfigurationManager.ConnectionStrings["YMMDMSConnectionString"].ConnectionString;
string query = "SELECT ID,Client,Projet,Date,Shift,CodDefaut FROM cascad";
string condition = string.Empty;
foreach (ListItem item in shift.Items)
{
condition += item.Selected ? string.Format("'{0}',", item.Value) : "";
}
if (!string.IsNullOrEmpty(condition))
{
condition = string.Format(" where Shift in ({0})", condition.Substring(0, condition.Length - 1));
}
string condition2 = string.Empty;
foreach (ListItem item in client.Items)
{
condition2 += item.Selected ? string.Format("'{0}',", item.Value) : "";
}
if (!string.IsNullOrEmpty(condition2))
{
condition2 = string.Format(" AND Client = {0}", condition2.Substring(0, condition2.Length - 1));
}
SqlCommand cmd = new SqlCommand(query + condition + condition2);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
sda.Fill(ds);
gvDemo.DataSource = ds;
gvDemo.DataBind();
}
}
}
}
protected void shift_SelectedIndexChanged(object sender, EventArgs e)
{
BindList();
}
protected void client_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (ListItem item in shift.Items)
{
if (item.Selected == true)
{
BindList();
}
}
}
}
我错过了什么?
【问题讨论】:
-
当你调试它时——因为我假设你当然已经调试过了——你发送到服务器的完整 SQL 查询是什么?
-
为什么循环调用
BindList?您只需调用一次(如果需要)。 -
我有两个 ChechBoxList : shift & client 完整的查询是 : query + condition + condition2 它取决于我检查了哪些框
-
您添加了硬编码脚本
" AND Client = {0}",如果您不选择第一个复选框并选择第二个复选框,则会导致问题。我建议您在 SQL 中创建一个存储过程并接受两个可为空的参数并在 SQL 查询中处理 NULL 情况。 -
即使我一开始选择第二个复选框列表也不会导致任何事情
标签: c# sql asp.net filtering checkboxlist