【问题标题】:Gridview checkbox losing information during sortingGridview 复选框在排序期间丢失信息
【发布时间】:2011-10-03 02:20:52
【问题描述】:

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

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

<asp:GridView ID="UserListGrid" runat="server"
    OnSorting="UserListGrid_Sort" AllowSorting = "True" AutoGenerateColumns="False"  
    AllowPaging="True" PageSize="25" OnRowDataBound="UserListGrid_RowDataBound" 
    OnPageIndexChanging="UserListGrid_PageIndexChanging">

。 . .

    <ItemTemplate>
       <asp:CheckBox ID="ActiveCheck" runat="server" SortExpression="ActiveCheck"/>                                                   
    </ItemTemplate>

。 . .

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();
}

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

根据要求,这里是 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();
        }
    }
}

【问题讨论】:

  • 您能否也说明一下 UserListGrid_RowDataBound 中发生的情况?
  • 而且这个结局看起来有点奇怪:OnPageIndexChanging=">
  • 编辑添加 UserListGrid_RowDataBound 并修复我的被切断的asp

标签: asp.net gridview checkbox


【解决方案1】:

看起来您不是从数据库中填充复选框,而是与单元格 11 的内容相对应(无论它是什么)。 我呼吁这个代码行:

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

在排序时重新绑定您的网格视图,但您限制在回发时填充和重新绑定复选框。这可能是复选框丢失值的原因。

【讨论】:

  • 是的!非常感谢您指出这一点。这个 bug 一直困扰着我一整天,我所要做的就是取出 !Page.IsPostback。我认为解决了它
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 2011-10-03
    • 2011-05-29
    • 2012-03-13
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多