if(e.Item.ItemType==ListItemType.Footer||e.Item.ItemType==ListItemType.Header)
是干啥用?你的这段程序是写在什么地方的?

解决方案 »

  1.   

    <asp:DataGrid id="DataGrid1"  runat="server" DataKeyField="id">
      

  2.   

    判断当前行是否为当前页的最后一条记录!作出相应处理
    If (datagrid1.Items.Count Mod 5) = 1 And datagrid1.CurrentPageIndex <> 0 Then5是pagesize
      

  3.   

    在删除操作前加一句
    DataGrid.CurrentPageIndex=0;
      

  4.   

    在你的BindGrid();函数加上这段代码int pagesum;
    if(ds.Tables[0].DefaultView.Count%DataGrid1.PageSize==0)
    pagesum=ds.Tables[0].DefaultView.Count/DataGrid1.PageSize;
    else
    pagesum=ds.Tables[0].DefaultView.Count/DataGrid1.PageSize+1;
    if(ds.Tables[0].DefaultView.Count==0)
    pagesum=1;
    if(DataGrid1.CurrentPageIndex>=pagesum)
    DataGrid1.CurrentPageIndex=pagesum-1;

    DataGrid1.DataBind();
      

  5.   

    解决方法:
    1)在该DataGrid中添加一个模板列,例如:
    <asp:TemplateColumn HeaderText="操作">
    <ItemTemplate>
    <asp:LinkButton Runat="server" ID="LinkButton1" OnClick="LinkButton_Click">删除</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    2)在该DataGrid中添加事件 OnItemCreated="OnItemCreated";该事件的代码如下:
    public void OnItemCreated(Object sender, DataGridItemEventArgs e)
    {
    ListItemType lit = e.Item.ItemType;
    if (lit == ListItemType.Item || lit == ListItemType.AlternatingItem)
    CustomizeItem(e);
    }private void CustomizeItem(DataGridItemEventArgs e)
    {
    WebControl wc;
    wc = ((WebControl) e.Item.Cells[Columns.Count-1]);
    String js = "return confirm('你确实需要删除该行值吗?');";
    wc.Attributes["onclick"] = js;
    wc.ToolTip = "Delete this row";
    }you try
      

  6.   

    我也遇到相同的问题?
    这一句 
       int  jobID  =(int)DataGrid1.DataKeys[(int)e.Item.ItemIndex];  
       目的是取得当前所选中的行  提示索引超出范围错误 到底怎么做呢?
     高手指教!
      

  7.   

    int)DataGrid1.DataKeys[(int)e.Item.ItemIndex]; 
    提示指定的转换无效。
     怎么回事?
      

  8.   

    to  binghe7(冰河) 在删除操作前加一句DataGrid.CurrentPageIndex=0;//------------------------------》
    嘿嘿!觉得应该是把这句加在BindGrid();前比较好
      

  9.   

    问题没有解决!~!!!!!!!
    myCmd.Parameters["@ID"].Value=dg.DataKeys[(int)e.Item.ItemIndex];这也行一直出错!
      

  10.   

    try
    {
      ....
    }
    catch
    {
       ....
       CurrentPageIndex=CurrentPageIndex-1;}在catch里判断,如果异常是那个INDEX错误就CurrentPageIndex=CurrentPageIndex-1
      

  11.   

    因为你要删除的时候,可能和页索引不一致而产生问题。楼上几个说过:
    DataGrid1.CurrentPageIndex = 0;
    把这句放在DELETE COMMAND 方法的第一行里,
    然后再执行操作就没问题了。至于你说的 myCmd.Parameters["@ID"].Value=dg.DataKeys[(int)e.Item.ItemIndex]; 
    也出了问题,你用TRY CATCH 来捕获一下,看看EXCEPTION的信息是什么,采取相应的解决方法.
      

  12.   

    Try
                mycom.ExecuteNonQuery()
                'DataGrid1.EditItemIndex = -1
                If (DataGrid1.Items.Count Mod 5) = 1 And DataGrid1.CurrentPageIndex <> 0 Then
                    DataGrid1.CurrentPageIndex = DataGrid1.CurrentPageIndex - 1
                End If
                DataGrid1.DataBind()
            Catch
                
            End Try这是我成功的例子,不过是vb.net。呵呵
      

  13.   

    string strDel = "DELETE FROM tb_User WHERE UsrID = @ID";
    SqlCommand myCmd = new SqlCommand(strDel, MyConnection);
    myCmd.Parameters.Add(new SqlParameter("@ID",SqlDbType.Int,4));
    //Response.Write(e.Item.ItemIndex.ToString());
    //Response.End();
    myCmd.Parameters["@ID"].Value=dg.DataKeys[(int)e.Item.ItemIndex]; myCmd.Connection.Open();
    try
    {
    myCmd.ExecuteNonQuery();
    msg("成功删除!");
                       if(DataGrid1.CurrentPageIndex>=1 &  DataGrid1.items.count==1)
                       DataGrid1.CurrentPageIndex=DataGrid1.CurrentPageIndex-1;//删除退页
    }
    catch (SqlException)
    {
    msg("删除失败!");
    }
    myCmd.Connection.Close();
    //Response.Write(e.Item.ItemIndex.ToString());
    //Response.End();