Вопрос по asp.net, c# – Как отфильтровать gridview из текстового поля?

1

Мне нужно отфильтровать 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        
}

Спасибо за помощь.

Вы хотите найти значение? ALI VOJDANIANARDAKANI
не могу использовать sqldaatsourse, потому что команда sql может быть одним из многих вариантов schaud
да, я хочу, чтобы результаты поиска. schaud
Используйте sqldatasource - и сопоставьте входные данные текстового поля в качестве параметра с запросом / хранимой процедурой, используемой sqldatasource deostroll
stackoverflow.com/questions/5843537/… Jonathan

Ваш Ответ

3   ответа
2

Попробуй это:

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.
Error: User Rate Limit Exceeded schaud
Error: User Rate Limit Exceeded
0
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;
1

Вот полный пример, который обрабатывает GridViewpaging, 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();
    }
}

Вот основной метод, который делает все (включая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:

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

Фильтр-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();
}

Просто конвертировал из VB вручную, поэтому надеюсь, что ошибок нет.

Похожие вопросы