datagrid删除时出现:索引超出范围错误,如何解决!!! if(e.Item.ItemType==ListItemType.Footer||e.Item.ItemType==ListItemType.Header)是干啥用?你的这段程序是写在什么地方的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <asp:DataGrid id="DataGrid1" runat="server" DataKeyField="id"> 判断当前行是否为当前页的最后一条记录!作出相应处理If (datagrid1.Items.Count Mod 5) = 1 And datagrid1.CurrentPageIndex <> 0 Then5是pagesize 在删除操作前加一句DataGrid.CurrentPageIndex=0; 在你的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(); 解决方法: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 我也遇到相同的问题?这一句 int jobID =(int)DataGrid1.DataKeys[(int)e.Item.ItemIndex]; 目的是取得当前所选中的行 提示索引超出范围错误 到底怎么做呢? 高手指教! int)DataGrid1.DataKeys[(int)e.Item.ItemIndex]; 提示指定的转换无效。 怎么回事? to binghe7(冰河) 在删除操作前加一句DataGrid.CurrentPageIndex=0;//------------------------------》嘿嘿!觉得应该是把这句加在BindGrid();前比较好 问题没有解决!~!!!!!!!myCmd.Parameters["@ID"].Value=dg.DataKeys[(int)e.Item.ItemIndex];这也行一直出错! try{ ....}catch{ .... CurrentPageIndex=CurrentPageIndex-1;}在catch里判断,如果异常是那个INDEX错误就CurrentPageIndex=CurrentPageIndex-1 因为你要删除的时候,可能和页索引不一致而产生问题。楼上几个说过:DataGrid1.CurrentPageIndex = 0;把这句放在DELETE COMMAND 方法的第一行里,然后再执行操作就没问题了。至于你说的 myCmd.Parameters["@ID"].Value=dg.DataKeys[(int)e.Item.ItemIndex]; 也出了问题,你用TRY CATCH 来捕获一下,看看EXCEPTION的信息是什么,采取相应的解决方法. 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。呵呵 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(); 请问Ajax页面怎样实现无刷新 根据ID号求属于几级名称,求算法 字段绑定问题,高手请进! 大侠帮忙啊,一个小功能问题 asp.net中关于父子窗体的问题! 深圳8级台风,风声响得我睡不着,放两个自制小控件给大家玩玩 自定义验证控件不起作用 这是什么问题,应该怎么解决,无法打开程序 爱分如命的人问一个问题 在web中内嵌的winform里,如何访问当前页面的session对象? 未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中 请教高手,一个令人头痛的问题:从asp页面向asp.net页面传递参数的问题!
If (datagrid1.Items.Count Mod 5) = 1 And datagrid1.CurrentPageIndex <> 0 Then5是pagesize
DataGrid.CurrentPageIndex=0;
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();
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
这一句
int jobID =(int)DataGrid1.DataKeys[(int)e.Item.ItemIndex];
目的是取得当前所选中的行 提示索引超出范围错误 到底怎么做呢?
高手指教!
提示指定的转换无效。
怎么回事?
嘿嘿!觉得应该是把这句加在BindGrid();前比较好
myCmd.Parameters["@ID"].Value=dg.DataKeys[(int)e.Item.ItemIndex];这也行一直出错!
{
....
}
catch
{
....
CurrentPageIndex=CurrentPageIndex-1;}在catch里判断,如果异常是那个INDEX错误就CurrentPageIndex=CurrentPageIndex-1
DataGrid1.CurrentPageIndex = 0;
把这句放在DELETE COMMAND 方法的第一行里,
然后再执行操作就没问题了。至于你说的 myCmd.Parameters["@ID"].Value=dg.DataKeys[(int)e.Item.ItemIndex];
也出了问题,你用TRY CATCH 来捕获一下,看看EXCEPTION的信息是什么,采取相应的解决方法.
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。呵呵
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();