在asp.net listview中排序过滤数据

时间:2012-03-19 18:00:46

标签: asp.net listview sorting

我已经创建了一个列表视图,其中填充了页面加载时数据库中的吉他列表,如下所示:

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["GuitarsLTDBConnectionString"].ToString());
        SqlCommand cmd = new SqlCommand("SELECT * FROM Guitars", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);
        DataTable dt = new DataTable();
        da.Fill(dt);
        lvGuitars.DataSource = dt;
        lvGuitars.DataBind();
    }

当用户选中与该广告相对应的复选框时,以下代码会过滤特定制作的吉他列表

protected void chkOrgs_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataTable dt = (DataTable)lvGuitars.DataSource;
        DataView dv = new DataView(dt);
        if (chkOrgs.SelectedValue == "Gibson")
        {
            dv.RowFilter = "Make = 'Gibson' OR Make='Fender'";
        }
        lvGuitars.DataSource = dv.ToTable();
        lvGuitars.DataBind();
    }

现在,我想要做的是能够对列表视图中存在的最新数据进行排序。意思是,如果在过滤之前单击了sort,它应该对所有数据进行排序。如果在筛选后单击了sort,则应对筛选的数据进行排序。我正在使用以下内容 代码,在LinkBut​​ton单击时触发

protected void lnkSortResults_Click(object sender, EventArgs e)
    {
        DataTable dt = (DataTable)lvGuitars.DataSource;
        DataView dv = new DataView(dt);
        dv.Sort = "Make ASC";
        lvGuitars.DataSource = dv.ToTable();
        lvGuitars.DataBind();
    }

问题是列表视图在排序任何过滤之前加载的所有数据,而不是最新过滤的数据。如何更改此代码,以便listview中可用的最新数据是已排序的?

由于

1 个答案:

答案 0 :(得分:0)

if (!Page.IsPostBack)
{
    SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["GuitarsLTDBConnectionString"].ToString());
    SqlCommand cmd = new SqlCommand("SELECT * FROM Guitars", con);
    SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);
    DataTable dt = new DataTable();
    da.Fill(dt);
    lvGuitars.DataSource = dt;
    lvGuitars.DataBind();
    ViewState["dt"] = dt;
}

需要像这样设置加载。访问/更新Viewstate以及过滤和排序。