当前位置: 代码迷 >> ASP.NET >> GridView连接sqldatasource删除有关问题,
  详细解决方案

GridView连接sqldatasource删除有关问题,

热度:4945   发布时间:2013-02-25 00:00:00.0
GridView连接sqldatasource删除问题,急啊~~~
我GV里面就三个字段,一个id,name,和删除按钮,
sqldatasource是动态(pageload的时候)创建并绑定的,显示没有问题,删除的时候就有问题了
SqlDataSource1.DeleteCommand   =   "delete   from   tb   where   id   =   @id ";

在GV.RowDeleting里面的代码如下:
SqlDataSource1.DeleteParameters.Add( "id ",   GV.DataKeys[e.RowIndex].Value.ToString());
                          SqlDataSource1.DeleteParameters.Clear();//因为用户可以随意点删除,怕参数会有问题,所以清除后重加了一次
                          SqlDataSource1.DeleteParameters.Add( "id ",   GV.DataKeys[e.RowIndex].Value.ToString());
                          SqlDataSource1.Delete();

(不过这个gridview里面的数据是用户通过点另一个gv添加进来的,没有问题)
现在出现的问题是:
1、有时候点击删除的时候,删除了2条数据,我用js显示看到的是第二条数据的id,比如我删除的记录ID是3,结果把3、4(后一条)也删除了,alert出来的是4

2、就是有时候出现错误:
索引超出范围。必须为非负值并小于集合大小
参数名:   index

------解决方案--------------------------------------------------------

SqlDataSource1.DeleteParameters.Add( "id ", GV.DataKeys[e.RowIndex].Value.ToString());
SqlDataSource1.Delete();
------解决方案--------------------------------------------------------
在Page_Load里加上
if(!IsPostBack)
{
//这里就是你删除数据的代码;
}
这样子测试一下。
------解决方案--------------------------------------------------------


在Page_Load里加上
if(!IsPostBack)
{
//这里就是你删除数据的代码;
}
这样子测试一下。


楼上面那位说的。应该是出在这里问题


------解决方案--------------------------------------------------------
if(!IsPostBack)
{
操作
}
我以前也和你的问题一样。一定要加上这个才可以。
------解决方案--------------------------------------------------------
自己加一个 “删除” 按钮,点击后删除数据库中的记录,然后重新绑定GV,这样不是更好,贴一个简单例子看一下
<asp:TemplateField HeaderText= "操作 ">
<ItemTemplate>
<asp:ImageButton ID= "DeleteBtn " runat= "server " CommandName= "delete " ImageUrl= "~/Images/delete.gif " CommandArgument= ' <%# DataBinder.Eval(Container.DataItem, "UserID ") %> ' />
</ItemTemplate> </asp:TemplateField>
RowCommand事件里这样写
protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "delete ")
{
执行删除,重新绑定
}
}
}
------解决方案--------------------------------------------------------
接分,用 e.Keys[0].ToString()