我有多个 ListBoxes 作为类别,部门,学院等。我在代码中填充了 GridView ( MSSQL ) - 背后。我将ListBoxes用作过滤器。
例如,当我从 CategoriesListBox 中选择一个类别时,GridView将仅显示此类别中的条目。当我还选择一个部门时,GridView将只显示所选类别和部门中的条目。
我想我会通过使用ListBoxes的 selectedIndexChanged 事件来完成它。我的aspx代码是:
public partial class Default : System.Web.UI.Page
{
private string constr = MY_CONNECTION_STRING;
protected void Page_Load(object sender, EventArgs e)
{
FillGridView();
}
protected void FillGridView()
{
string Query = "SELECT * FROM Entry WHERE Category = '" + SelectedCategory +"' AND Department = '" + SelectedDepartment +"'";
SqlConnection conn = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand(Query, conn);
try
{
conn.Open();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
catch (Exception ex)
{
Response.Write("Hata: " + ex.Message);
}
finally
{
conn.Close();
}
}
protected void CategoriesListBox_SelectedIndexChanged(object sender, EventArgs e)
{
// Here I want to get SelectedCategory value and re-fill GridView
}
protected void DepartmentsListBox_SelectedIndexChanged(object sender, EventArgs e)
{
// Here I want to get SelectedDepartment value and re-fill GridView
}
}
感谢您的帮助。
答案 0 :(得分:0)
你可以从你的表中选择你的连接字符串中的CategoryName = @参数
@parameter是您的列表框selectedItem或选定的值。
答案 1 :(得分:0)
使用您自己的代码,为什么不将类别和部门传递给FillGridView?如果其中一个为空,则意味着根本没有过滤器。所以,像这样:
protected void CategoriesListBox_SelectedIndexChanged(object sender, EventArgs e)
{
FillGridView(lbCategory.SelectedItem.ToString(), lbDepartment.SelectedItem.ToString());
}
同样适用于DepartmentsListBox_SelectedIndexChanged
事件。
然后将FillGridView函数更改为:
protected void FillGridView(string SelectedCategory, string SelectedDepartment)
此外,如果我可以建议立即收集所有表格内容,将数据保存到内存中的副本并从所述副本中过滤掉,这样可以实现更加快速和更好的用户体验。 / p>
编辑:
if (selectedCategory.Trim() == "")
selectedCategory = "IS NOT NULL";
else
selectedCategory = " = \'" + selectedCategory.Trim() + "\'";
if (selectedDepartment.Trim() == "")
selectedDepartment = "IS NOT NULL";
else
selectedDepartment = " = \'" + selectedDepartment.Trim() + "\'";
string Query = "SELECT * FROM Entry WHERE Category " + SelectedCategory + " AND Department " + SelectedDepartment;
将它添加到FillGridView函数的开头(这只是一个快速而简单的黑客,而不是最好的解决方案)。