How to filter gridview from textbox?

前端 未结 3 1248
北荒
北荒 2020-12-18 17:02

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

相关标签:
3条回答
  • 2020-12-18 17:14

    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.
    0 讨论(0)
  • 2020-12-18 17:23

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

    // 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):

    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:

    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:

    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.

    0 讨论(0)
  • 2020-12-18 17:32
    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;
    
    0 讨论(0)
提交回复
热议问题