选中的复选框在排序或分页后变为未选中(不是GridView)

本文关键字:不是 GridView 分页 复选框 排序 | 更新日期: 2023-09-27 18:04:20

我有一个复选框在aspx表单页面,外部GridView。

如果我选中这个复选框,执行一个查询,填充这个gridview并更新你的行。

这个Gridview是分页的,当我改变页面返回到初始Gridview行,失去了复选框中的选择。

是否有办法在排序和分页后保持检查?

谢谢。

编辑# 1

我的代码如下。

中的checkbox被选中时,BindData();将执行与初始查询不同的查询。

int ck = 0;
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindData();
    }
}

protected void ddlPages_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow gvrPager = gvProducts.BottomPagerRow;
    DropDownList ddlPages = (DropDownList)gvrPager.Cells[0].FindControl("ddlPages");
    gvProducts.PageIndex = ddlPages.SelectedIndex;
    BindData();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvProducts.PageIndex = e.NewPageIndex;
    BindData();
}
protected void Paginate(object sender, CommandEventArgs e)
{
    int intCurIndex = gvProducts.PageIndex;
    switch (e.CommandArgument.ToString().ToLower())
    {
        case "First":
            gvProducts.PageIndex = 0;
            break;
        case "Prev":
            gvProducts.PageIndex = intCurIndex - 1;
            break;
        case "Next":
            gvProducts.PageIndex = intCurIndex + 1;
            break;
        case "Last":
            gvProducts.PageIndex = gvProducts.PageCount - 1;
            break;
    }
    gvProducts.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "money")) > 100000)
        {
            e.Row.BackColor = System.Drawing.Color.AntiqueWhite;
        }
    }
    if (e.Row.RowType == DataControlRowType.Pager)
    {
        DropDownList ddl = (DropDownList)(e.Row.FindControl("ddlpages"));
        Label lblPageCount = (Label)e.Row.FindControl("lblPageCount");
        if (lblPageCount != null)
            lblPageCount.Text = gvProducts.PageCount.ToString();
        for (int i = 1; i <= gvProducts.PageCount; i++)
        {
            ddl.Items.Add(i.ToString());
        }
        ddl.SelectedIndex = gvProducts.PageIndex;
        if (gvProducts.PageIndex == 0)
        {
            ((ImageButton)e.Row.FindControl("ImageButton1")).Visible = false;
            ((ImageButton)e.Row.FindControl("ImageButton2")).Visible = false;
        }
        if (gvProducts.PageIndex + 1 == gvProducts.PageCount)
        {
            ((ImageButton)e.Row.FindControl("ImageButton3")).Visible = false;
            ((ImageButton)e.Row.FindControl("ImageButton4")).Visible = false;
        }
    }
}

protected void chkLinked_CheckedChanged(Object sender, EventArgs args)
{
    if (sender != null)
    {
        try
        {
            if (((CheckBox)sender).Checked)
            {
                ck = 1;
                BindData();
            }
            else
            {
                ck = 0;
                BindData();
            }
        }
        catch { }
    }
}

编辑# 2

private DataSet RetrieveProducts()
{
    if (ViewState["Products"] != null)
        return (DataSet)ViewState["Products"];
        if (ck > 0)
        {
            sql = @" SELECT * FROM doTable Where money > 100000; ";
        }
        else
        {
            sql = @" SELECT * FROM doTable; ";
        }
    DataSet dsProducts = new DataSet();
    using (OdbcConnection cn =
      new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
    {
        cn.Open();
        using (OdbcCommand cmd = new OdbcCommand(sql, cn))
            OdbcDataAdapter adapter = new OdbcDataAdapter(cmd);
            adapter.Fill(dsProducts);
        }
    }
    return dsProducts;
}

private void BindData()
{
    gvProducts.DataSource = RetrieveProducts();
    gvProducts.DataBind();
}

选中的复选框在排序或分页后变为未选中(不是GridView)

可能的原因是复选框没有启用Viewstate,这就是为什么它没有保留状态。要启用它,可以使用复选框的EnableViewState属性。

<asp:CheckBox ID="chkLinked" runat="server" EnableViewState="true"/>.