Asp.net Gridview复选框在排序过程中丢失信息

Asp.net Gridview复选框在排序过程中丢失信息,asp.net,gridview,checkbox,Asp.net,Gridview,Checkbox,所以我在gridview中有一个复选框,它在大部分情况下工作正常。但是,我正在尝试对网格实现列排序,这导致复选框出现问题。当我从数据库中进行初始提取时,它会正确地填充复选框,但当我单击一列按其排序时,所有复选框都会被清除 这似乎是gridview执行数据绑定的问题,但我不确定我做错了什么。我对这个问题的研究让我觉得我是对的,但我不确定(遗留代码:我讨厌它) 我的分类有什么明显的问题吗?如果需要,我可以提供更多的代码 根据要求,这里是UserListGrid_RowDataBound protec

所以我在gridview中有一个复选框,它在大部分情况下工作正常。但是,我正在尝试对网格实现列排序,这导致复选框出现问题。当我从数据库中进行初始提取时,它会正确地填充复选框,但当我单击一列按其排序时,所有复选框都会被清除

这似乎是gridview执行数据绑定的问题,但我不确定我做错了什么。我对这个问题的研究让我觉得我是对的,但我不确定(遗留代码:我讨厌它)

我的分类有什么明显的问题吗?如果需要,我可以提供更多的代码

根据要求,这里是UserListGrid_RowDataBound

protected void UserListGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataControlRowType.DataRow)
    {
        return;
    }
    // See which users are active
    CheckBox ActiveCheck = (CheckBox)e.Row.Cells[1].FindControl("ActiveCheck");
    if (ActiveCheck != null)
    {
        ActiveCheck.Enabled = true;
        if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack)
        {
            ActiveCheck.Checked = true;
            ActiveCheck.DataBind();
        }
    }
}

看起来您不是从数据库填充复选框,而是对应于单元格11的内容(无论是什么)。 我在此呼吁:

if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack)

排序时,重新绑定gridview,但会限制回发时复选框的填充和重新绑定。这可能是复选框丢失值的原因。

我看不出您在哪里保存复选框的数据。但是,好的方法是保存最终用户在每次请求时对服务器所做的所有更改。据我所见,数据存储在DataTable中。因此,通常,您应该浏览所有网格行,在其中找到复选框,并将其值保存在此表中。这应该在页面加载方法中完成。这是UserListGrid\u RowDataBound事件处理程序中的代码正常工作所必需的。

您还可以显示UserListGrid\u RowDataBound中发生的情况吗?这个结尾看起来有点奇怪:OnPageIndexchangg=“>编辑以添加UserListGrid_RowDataBound并修复被切断的我的asp是!非常感谢你指出这一点。这只虫子困扰了我一整天,我所要做的就是把它拿出来!Page.IsPostback。我想这已经解决了
protected void UserListGrid_Sort(object sender, GridViewSortEventArgs e)
{
        // ViewState["CurTab"] = 0;
        DataTable Data = myData.GetSessionRoster(TeamID);
        DataView UserListView = new DataView(Data);
        ViewState["SortDirection"] = myData.ConvertSortDirectionToSql(ViewState["SortDirection"] == null ? "" : ViewState["SortDirection"].ToString());
        UserListView.Sort = e.SortExpression + " " + ViewState["SortDirection"];
        UserListGrid.DataSource = UserListView;
        UserListGrid.DataBind();
}
protected void UserListGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataControlRowType.DataRow)
    {
        return;
    }
    // See which users are active
    CheckBox ActiveCheck = (CheckBox)e.Row.Cells[1].FindControl("ActiveCheck");
    if (ActiveCheck != null)
    {
        ActiveCheck.Enabled = true;
        if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack)
        {
            ActiveCheck.Checked = true;
            ActiveCheck.DataBind();
        }
    }
}
if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack)