Gridview删除多行后,绑定视图不对

StillMiss 2010-06-29 03:35:41
描述: 前台使用JS , checkbox做的全选 。其实 行内 用隐藏控件绑定一个ID。其实gridview也设有datakeys。

是在gridview外面添加一个按钮 ,然后删除的。

后台删除的方法,逻辑有点问题。选中一行删除没问题,一次性全选删除没问题。

假设数据库10条数据,我第一次选中8条 ,删除成功 视图绑定无错。

但是第二次选中最后两条,然后删除,数据库删除 掉 了数据,但是视图确不对了!~~那最后两条还显示在那呢。

前台代码:
<asp:TemplateField HeaderText="选择">
<HeaderTemplate>
<input type="checkbox" onclick="fun(this)" />全选
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" />
<asp:HiddenField ID="hid1" runat="server" Value='<%#Bind("BookID")%>' />
</ItemTemplate>
</asp:TemplateField>





后台代码

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridivew();
}
}

private void BindGridivew()
{
BLL.GuestbookBLL guestbookbll = new GuestbookBLL();
if ((guestbookbll.GetAllList().Tables[0].Rows.Count) == 0 )
{
this.Label1.Text = "目前没有留言,或留言已经被清除。";
}
else
{
this.GridView1.DataSource = guestbookbll.GetAllList();
this.GridView1.DataBind();
}
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
//分页
this.GridView1.PageIndex = e.NewPageIndex;
this.BindGridivew();
}



protected void Button1_Click(object sender, EventArgs e)
{

//删除按钮
foreach (GridViewRow gr in GridView1.Rows)
{
CheckBox chk = (CheckBox)gr.FindControl("chk");
if (chk.Checked == true)
{
int gid = Convert.ToInt32(this.GridView1.DataKeys[gr.RowIndex].Value);
BLL.GuestbookBLL bll = new GuestbookBLL();
bll.Delete(gid);

}
BindGridivew();
}
}
...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
StillMiss 2010-06-29
  • 打赏
  • 举报
回复
非常感谢。问题解决了 。。。我逻辑思维不行啊 谢谢了
!!!!!
感激涕零
q107770540 2010-06-29
  • 打赏
  • 举报
回复


private void BindGridivew()
{
BLL.GuestbookBLL guestbookbll = new GuestbookBLL();

var q=guestbookbll.GetAllList();
if ((q.Tables[0].Rows.Count) == 0 )
{
this.Label1.Text = "目前没有留言,或留言已经被清除。";
this.GridView1.DataSource =null; //加上这一两句就没问题了
this.GridView1.DataBind();
}
else
{
this.GridView1.DataSource =q;
this.GridView1.DataBind();
}
}

StillMiss 2010-06-29
  • 打赏
  • 举报
回复
绑定的位置已经换到循环外面了,不过先删一条,可以成功绑定,然后把余下全删了,绑定逻辑错误。

虽然数据库删除了数据库,但是页面仍然显示 这次删除的数据,

还显示目前没有留言,或留言已经被清除。

先谢谢1楼的意见 不过问题还没解决~~~~
aluogang 2010-06-29
  • 打赏
  • 举报
回复
protected void Button1_Click(object sender, EventArgs e)
{

//删除按钮
foreach (GridViewRow gr in GridView1.Rows)
{
CheckBox chk = (CheckBox)gr.FindControl("chk");
if (chk.Checked == true)
{
int gid = Convert.ToInt32(this.GridView1.DataKeys[gr.RowIndex].Value);
BLL.GuestbookBLL bll = new GuestbookBLL();
bll.Delete(gid);

}

}
BindGridivew();
}
wan1i209 2010-06-29
  • 打赏
  • 举报
回复
这代码写的。。。
wan1i209 2010-06-29
  • 打赏
  • 举报
回复
protected void Button1_Click(object sender, EventArgs e)
{

//删除按钮
foreach (GridViewRow gr in GridView1.Rows)
{
CheckBox chk = (CheckBox)gr.FindControl("chk");
if (chk.Checked == true)
{
int gid = Convert.ToInt32(this.GridView1.DataKeys[gr.RowIndex].Value);
BLL.GuestbookBLL bll = new GuestbookBLL();
bll.Delete(gid);

}
}
BindGridivew();
}

q107770540 2010-06-29
  • 打赏
  • 举报
回复


BLL.GuestbookBLL bll = new GuestbookBLL();//此句 也放在foreach外边,不要每次循环都实例化一次
foreach (GridViewRow gr in GridView1.Rows)
{
CheckBox chk = (CheckBox)gr.FindControl("chk");
if (chk.Checked == true)
{
int gid = Convert.ToInt32(this.GridView1.DataKeys[gr.RowIndex].Value);

bll.Delete(gid);

}

}

BindGridivew();//将此句放在foreach外边,你如果一次删除100条,就要访问数据库100次,累不累?



ps:
//此方法个人的一点修改小意见
//绑定数据一次为何要访问两次数据库?
private void BindGridivew()
{
BLL.GuestbookBLL guestbookbll = new GuestbookBLL();

var q=guestbookbll.GetAllList();
if ((q.Tables[0].Rows.Count) == 0 )
{
this.Label1.Text = "目前没有留言,或留言已经被清除。";
}
else
{
this.GridView1.DataSource =q;
this.GridView1.DataBind();
}
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧