• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

批量删除问题,请求帮助

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()
{......
...全文
153 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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"
回复
biduan 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来删除

回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-10-29 05:05
社区公告
暂无公告