C# 如何从文本框中过滤gridview?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10893860/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 15:40:59  来源:igfitidea点击:

How to filter gridview from textbox?

c#asp.netgridview

提问by schaud

I need to filter a gridview that retreives filtered data from a table. Therefore I bound the gridview to a dataset. Now i can't seem to find a solution to filter it further.

我需要过滤一个从表中检索过滤数据的网格视图。因此我将 gridview 绑定到一个数据集。现在我似乎找不到进一步过滤它的解决方案。

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
    {
        DataSet ds = new DataSet();
        SqlConnection myCon = new SqlConnection(connectionstring);
        SqlDataAdapter adapter = new SqlDataAdapter(cmd, myCon);
        adapter.Fill(ds);
        GridView1.DataSource = ds;
        GridView1.DataBind();
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
//need to insert code here for filtering GridView1 based on TextBox1.Text        
}

Thanks for the help.

谢谢您的帮助。

采纳答案by Kapil Khandelwal

Try this:

尝试这个:

protected void Button1_Click(object sender, EventArgs e)
{

    DataSet ds = new DataSet();
    SqlConnection myCon = new SqlConnection(connectionstring);
    SqlDataAdapter adapter = new SqlDataAdapter(cmd, myCon);
    adapter.Fill(ds);
    DataView view = new DataView();
    view.Table = ds.Tables[0];
    view.RowFilter = "ColumnName = " + TextBox1.Text.Trim();
    GridView1.DataSource = view;
    GridView1.DataBind();
}
  • you have to refactor your code.
  • 你必须重构你的代码。

回答by ALI VOJDANIANARDAKANI

sql = new SqlConnection(Connection.con);
            adapter = new SqlDataAdapter(@"select EntryID * from Table where Name like @Name ", sql);
            adapter.SelectCommand.Parameters.AddWithValue("@Name", string.Format("%{0}%", textBox1.Text));
            dt = new DataTable();
            adapter.Fill(dt);
            dataGridView1.DataSource = dt;

回答by Tim Schmelter

Here's a complete sample which handles GridView's paging, sorting(both directions) and filtering(two columns).

这是一个完整的示例,它处理 GridView 的paging, sorting(两个方向)和filtering(两列)。

// store sorting across postbacks in a ViewState variable
public string SortExpression
{
    get
    {
        if (ViewState["GridSort"]== null)
        {
            ViewState["GridSort"] = "Column1 ASC";
        }
        return ViewState["GridSort"].ToString();
    }
    set { ViewState["GridSort"] = value; }
}

protected void Page_load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindGrid();
    }
}

Here's the main method that does all (including the filter-function):

这是执行所有操作的主要方法(包括filter- 函数):

private void BindGrid()
{
    try
    {
        var tblData = new DataTable();
        var filter1 = TextBox1.Text.Trim();
        var filter2 = TextBox2.Text.Trim();
        using (var sqlCon = new System.Data.SqlClient.SqlConnection(connectionstring))
        {
            String sql = String.Empty;
            var sqlCmd = new System.Data.SqlClient.SqlCommand();
            if (filter1.Length != 0 && filter2.Length != 0)
            {
                sql = "SELECT Column1,Column2 FROM Table WHERE Column1 LIKE @Column1 AND Column2 LIKE @Column2 ORDER BY {0}";
                sqlCmd.Parameters.AddWithValue("@Column1", string.Format("%{0}%", filter1));
                sqlCmd.Parameters.AddWithValue("@Column2", string.Format("%{0}%", filter2));
            }
            else if (filter1.Length != 0)
            {
                sql = "SELECT Column1,Column2 FROM Table WHERE Column1 LIKE @Column1 ORDER BY {0}";
                sqlCmd.Parameters.AddWithValue("@Column1", string.Format("%{0}%", filter1));
            }
            else if (filter2.Length != 0)
            {
                sql = "SELECT Column1,Column2 FROM Table WHERE Column2 LIKE @Column2 ORDER BY {0}";
                sqlCmd.Parameters.AddWithValue("@Column2", string.Format("%{0}%", filter2));
            }
            else
            {
                // no filter, select all
                sql = "SELECT Column1,Column2 FROM Table ORDER BY {0}";
            }
            sqlCmd.CommandText = string.Format(sql, this.SortExpression);
            sqlCmd.Connection = sqlCon;
            using (System.Data.SqlClient.SqlDataAdapter objAdapter = new System.Data.SqlClient.SqlDataAdapter(sqlCmd))
            {
                objAdapter.Fill(tblData);
            }
        }
        GridView1.DataSource = tblData;
        GridView1.DataBind();
    }
    catch (Exception)
    {
        // log
        throw;
    }
}

Paging:

Paging

private void GridView1_PageIndexChanging(object sender, System.Web.UI.WebControls.GridViewPageEventArgs e)
{
    this.GridView1.PageIndex = e.NewPageIndex;
    BindGrid();
}

Filter-Button-Click:

过滤器按钮单击:

private void BtnFilter_Click(object sender, System.EventArgs e)
{
    BindGrid();
}

Sorting:

Sorting

protected void GridView1_Sorting(object sender, System.Web.UI.WebControls.GridViewSortEventArgs e)
{
    string currentSortColumn = null;
    string currentSortDirection = null;
    currentSortColumn = this.SortExpression.Split(' ')[0];
    currentSortDirection = this.SortExpression.Split(' ')[1];
    if (e.SortExpression.Equals(currentSortColumn))
    {
        //switch sort direction
        switch (currentSortDirection.ToUpper())
        {
            case "ASC":
                this.SortExpression = currentSortColumn + " DESC";
                break;
            case "DESC":
                this.SortExpression = currentSortColumn + " ASC";
                break;
        }
    }
    else
    {
        this.SortExpression = e.SortExpression + " ASC";
    }
    BindGrid();
}

Just converted from VB manually, so i hope there are no remaining errors.

刚刚从VB手动转换,所以我希望没有剩余的错误。