用于GridView的ASP.NET手册ListBox过滤器

时间:2013-12-19 20:18:58

标签: c# asp.net sql-server gridview listbox

我有多个 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
    }
}

感谢您的帮助。

2 个答案:

答案 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函数的开头(这只是一个快速而简单的黑客,而不是最好的解决方案)。