批量删除问题,请求帮助

freshly 2004-10-29 05:05:04
请教一个问题,如上批量删除代码工作有问题!如果是第一页的,删除功能没有问题,可翻页后就有问题,比如翻至第3页,选中几个checkbox然后删除,发现删除的是第一页的内容,不知道问题何在!!!
<asp:datagrid id="UserList" runat="server" AllowPaging="True" PageSize="12" OnPageIndexChanged="UserList_Page"
AutoGenerateColumns="False" OnDeleteCommand="UserList_Delete">
<PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
<Columns>
<asp:BoundColumn DataField="UserAccountsID" HeaderText="ID" Visible="False"></asp:BoundColumn>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:CheckBox ID="allselect" AutoPostBack="True" OnCheckedChanged="allselect_changed" Runat="server"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="delselect" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>

.aspx
public void allselect_changed(object sender,System.EventArgs e)
{
CheckBox cb=(CheckBox)sender;
foreach(DataGridItem i in UserList.Items)
{
CheckBox cb1=(CheckBox)i.FindControl("delselect");
if(cb.Checked)
cb1.Checked=true;
else
cb1.Checked=false;
}
}
public void Item_Del(object sender,System.EventArgs e)
{
string strconn=ConfigurationSettings.AppSettings["TyConn"];
SqlConnection conn=new SqlConnection(strconn);
string strsql="select * from UserAccounts";
SqlDataAdapter myComm=new SqlDataAdapter(strsql,conn);
DataSet ds=new DataSet();
myComm.Fill(ds,"UserAccountsID");
for(int i=0;i<UserList.Items.Count;i++)
{
CheckBox cb=(CheckBox)UserList.Items[i].FindControl("delselect");
if(cb.Checked)
{
ds.Tables["UserAccountsID"].Rows[i].Delete();
}
}
SqlCommandBuilder UsernameCmdBd=new SqlCommandBuilder(myComm);
myComm.Update(ds,"UserAccountsID");
BindGrid();
}
public void BindGrid()
{......
...全文
219 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
apcsherry 2005-05-20
  • 打赏
  • 举报
回复
收藏
SeeSunSet 2004-10-30
  • 打赏
  • 举报
回复
你应该根据ID来删除
brightheroes 2004-10-30
  • 打赏
  • 举报
回复
string idlist = "";

for(int i=0;i<UserList.Items.Count;i++)
{
CheckBox cb=(CheckBox)UserList.Items[i].FindControl("delselect");
if(cb.Checked)
{
idlist += this.UserList.DataKeys[i].ToString() + ",";
}

if(idlist.Length > 0)
idlist = "(" + idlist.substring(0,idlist.Length - 1) + ")";


string sql = "delete from yourTable where id in " + idlist;

sqlCommand com = new sqlcommand(sql,yourConnection);
yourConnection.Open();
com.ExecuteNonQuary();
yourConnection.Close();

。。。。。
然后重新绑定你的数据
brightheroes 2004-10-30
  • 打赏
  • 举报
回复

if(cb.Checked)
{
string id = this.UserList.DataKeys[i].ToString();
DataRow[] drs = ds.Tables["UserAccountsID"].Select("UserAccountsID= " + id);
if(drs.Length == 1)
drs[0].Delete();
}
}


其次,你还可以这样作,你根本没有必要重新把所有的数据select出来,然后再删除
你完全可以根据UserAccountsID来删除
假设你的UserList.DataKeyField = UserAccountsID
那么删除代码如下:
freshly 2004-10-30
  • 打赏
  • 举报
回复
brightheroes(闭关|那一剑的风情)
我的表id是UserAccountsID

freshly 2004-10-30
  • 打赏
  • 举报
回复
好的问题已解决,谢谢您!
lxcc 2004-10-29
  • 打赏
  • 举报
回复
同意brightheroes(闭关|那一剑的风情)
在与DataGrid帮定的DataSet中的DataTable中删除记录
brightheroes 2004-10-29
  • 打赏
  • 举报
回复
你的表没有ID吗?
DataKeyField="UserAccountsID"
-->
DataKeyField="ID"
「已注销」 2004-10-29
  • 打赏
  • 举报
回复
楼主的代码好熟悉啊:)
jintaogentle 2004-10-29
  • 打赏
  • 举报
回复
其实你可以在删除前判断一下当前页n,然后根据剩下的总页数m,if(n>m)就强制删除后是否应该跳转到n-1,当然0就不用处理了
freshly 2004-10-29
  • 打赏
  • 举报
回复
请求帮助
freshly 2004-10-29
  • 打赏
  • 举报
回复
DataKeyField="UserAccountsID"
然后替换你的代码运行提示找不到ID,...
freshly 2004-10-29
  • 打赏
  • 举报
回复
brightheroes(闭关|那一剑的风情),我按照你的方法修改还是没有解决,可以msn我把代码发给你,帮我看看么?谢谢
msn:freshly@mail.nbptt.zj.cn
brightheroes 2004-10-29
  • 打赏
  • 举报
回复
设置你的UserList的DataKeyField为id

然后修改密码如下:

if(cb.Checked)
{
ds.Tables["UserAccountsID"].Rows[i].Delete();
}

--->

if(cb.Checked)
{
string id = this.UserList.DataKeys[i].ToString();
DataRow[] drs = ds.Tables["UserAccountsID"].Select("id = " + id);
if(drs.Length == 1)
drs[0].Delete();
}
}
brightheroes 2004-10-29
  • 打赏
  • 举报
回复
ds.Tables["UserAccountsID"].Rows[i].Delete();有问题
你换页之后,UserList.Items就从头开始了
所以,无论你第几页,都是不可能大于你的一页的最大值

所以 你应该根据ID来删除

62,243

社区成员

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

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

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

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