小弟用gridview来显示网格数据,设置了gridview的属性DataKeyNames="ID",并设置<asp:ButtonField CommandName="Delete" Text="删除"  />,当点删除按钮时想获取删除行的索引值long id=Convert.ToInt64(this.del_info.DataKeys[e.RowIndex]);然后根据这个索引值来执行删除操作,但是编译时出错如题,这是怎么回事啊?

解决方案 »

  1.   

    估计是你在获取这个值的时候,该行已被删除了
    你可以在Delete事件中这样写呀this.gridView.Rows.DeleteRow(e.RowIndex)不需要获取索引值吗
      

  2.   

    要获取索引值啊,我获取记录的时候记录是存在于数据库里的,但是不知道为什么,this.gridView.Rows.DeleteRow(e.RowIndex) 能响应到数据库吗?
      

  3.   

    在data souce里面设置delete command="delete from 表明 where id=@你设置的DataKeyNames值"
      

  4.   

    我使用的是存储过程,三层架构,所以我要获得索引值来传递参数.我调试的时候是在long   id=Convert.ToInt64(this.del_info.DataKeys[e.RowIndex]);这个语句里提示错误的,并报错为如题
      

  5.   

    cherish024的方法我测试过了,行不通!
      

  6.   

    表头?我在gridview里设置了 GridLines="None" ShowHeader="False"
      

  7.   

    DataKeyNames你设置的是数据库索引的字段吗比如id之类的
      

  8.   

    把执行的SQL语句打印出来
    多半是因为你的SQL有问题
      

  9.   

    我记得抱这个错!是因为你删除行的索引与你指定的索引不符
      就比如说你指定ID为索引 你的ID=5
        其实你的gridview里面只有3行!或者只有1行!这会你删除或者编辑时!就抱索引超出范围。必须为非负值并小于集合大小
      

  10.   

    一:使用存储过程:
    CREATE PROCEDURE DeleteinfoByID
    (
    @ID bigint
    )
    as
    delete from [info_table] where [ID]=@ID
    GO
    二:gridview结构:
    <asp:GridView ID="del_webaddress_info" runat="server" AutoGenerateColumns="False" GridLines="None" ShowHeader="False" PageSize="2" AllowPaging="true" OnPageIndexChanging="del_webaddress_data_show_OnPageIndexChanging" OnRowDeleting="del_webaddress_info_rowdeleting"  DataKeyNames="ID">
                                          <Columns>
                                                 <asp:TemplateField>
                                                    <ItemTemplate>
                                                          ........                                                                                  </ItemTemplate>
                                                 </asp:TemplateField>
                                                 <asp:ButtonField CommandName="Delete" Text="删除记录" ButtonType="Link" ShowHeader="false" />
                                          </Columns>
                                        </asp:GridView>
    三:删除事件
     protected void del_webaddress_info_rowdeleting(object sender,GridViewDeleteEventArgs e)
        {
            //找到要删除的ID号!
            long id=Convert.ToInt64(this.del_webaddress_info.DataKeys[e.RowIndex]["ID"].ToString());
       ......
        }
    求各位大虾了.
      

  11.   

    OnRowDeleting="del_webaddress_info_rowdeleting"  这个去掉在data souce里面设置deletecommand="delete from 表名 where id=@ID"删除事件都不用写~~
      

  12.   

    先不要删,定义一个变量,设个断点,先看下e.RowIndex的值是多少,再到数据库里看下表中的数据是在多少行,看看问题出在哪儿