【发布时间】: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