我在aspx表单页面中有一个复选框,在GridView外部。
如果我选中此复选框,则会执行一个填充此gridview并更新行的查询。
此Gridview是分页的,当我更改页面返回到初始GridView行并丢失复选框中的选择时。
有没有办法在排序和分页后保持检查?
感谢。
编辑#1
我的代码如下。
当在 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();
}
答案 0 :(得分:2)
可能的原因可能是没有为复选框启用Viewstate,这就是为什么它不保留状态。要启用它,您可以使用复选框的EnableViewState属性。
<asp:CheckBox ID="chkLinked" runat="server" EnableViewState="true"/>.