网格视图过滤的数据

本文关键字:数据 过滤 视图 网格 | 更新日期: 2023-09-27 18:02:01

我感兴趣的是获取用户在应用一些过滤器后在网格视图中看到的所有数据。例如,原始网格的数据源包含10条记录,但是用户应用了一个过滤器,之后只显示了5条记录,我想将这5条记录放在一个列表中。如何做到这一点呢?

网格视图过滤的数据

假设您的网格绑定了某个集合,那么在回发时,您可以抓取gridview的数据源,应用您的过滤器,并将其保存到一个新的集合。

类似:

var datasource = yourGridView.DataSource as List<someType>;
var filteredResults = datasource.Where( ... ); // apply your filters inside the Where

显然,将示例变量名称/类型替换为您在代码中使用的名称/类型。

这是一个很好的小例子,用来过滤网格视图:

protected void btnSearch(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("MyConn");
    SqlCommand cmd = new SqlCommand();
    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    cmd.Connection = con;
    cmd.CommandText = "SELECT * FROM CustomerTable WHERE NumberOfCustomer = @NumberOfCustomer";
    cmd.Parameters.AddWithValue("NumberOfCustomer", TextBox1.Text);
    try
    {
        con.Open();
        sda.Fill(dt);
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    finally
    {
        con.Close();
    }
    GridView1.DataSource = dt;
    GridView1.DataBind();
}

然后将数据源绑定到一个列表:

protected void bindToList(object sender, EventArgs e)
{
    var datasource = GridView1.DataSource as List<Customers>;
    if ( !IsPostBack )
    {
        DropDownList ddl = new DropDownList();
        ddl.DataTextField = "Name";
        ddl.DataValueField = "Id";
        ddl.DataSource = datasource;
        ddl.DataBind();
        ddl.SelectedValue = list.Find( o => o.Selected == true ).Id.ToString();
    }
}