说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误: 行 65: Dim conn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(ConfigurationSettings.AppSettings("LawConnStr"))
行 66: Dim number As String = CType(e.Item.FindControl("number"), TextBox).Text
行 67: Dim strsql As String = "Update dingdan set num=" & number & " where " & DataList1.DataKeyField & "=" & DataList1.DataKeys(e.Item.ItemIndex)
行 68: ExecuteSQL(strsql)
行 69: DataList1.EditItemIndex = -1
源文件: E:\ww\hd\shopping\shoppingcart.aspx.vb 行: 67 堆栈跟踪: [ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +91
System.Web.UI.WebControls.DataKeyCollection.get_Item(Int32 index) +10
hd.shoppingcart.DataList_UpdateCommand(Object sender, DataListCommandEventArgs e) in E:\ww\hd\shopping\shoppingcart.aspx.vb:67
System.Web.UI.WebControls.DataList.OnUpdateCommand(DataListCommandEventArgs e) +109
System.Web.UI.WebControls.DataList.OnBubbleEvent(Object source, EventArgs e) +294
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
System.Web.UI.WebControls.DataListItem.OnBubbleEvent(Object source, EventArgs e) +101
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +115
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
System.Web.UI.Page.ProcessRequestMain() +1277
这个怎么解决啊???
行 66: Dim number As String = CType(e.Item.FindControl("number"), TextBox).Text
行 67: Dim strsql As String = "Update dingdan set num=" & number & " where " & DataList1.DataKeyField & "=" & DataList1.DataKeys(e.Item.ItemIndex)
行 68: ExecuteSQL(strsql)
行 69: DataList1.EditItemIndex = -1
源文件: E:\ww\hd\shopping\shoppingcart.aspx.vb 行: 67 堆栈跟踪: [ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +91
System.Web.UI.WebControls.DataKeyCollection.get_Item(Int32 index) +10
hd.shoppingcart.DataList_UpdateCommand(Object sender, DataListCommandEventArgs e) in E:\ww\hd\shopping\shoppingcart.aspx.vb:67
System.Web.UI.WebControls.DataList.OnUpdateCommand(DataListCommandEventArgs e) +109
System.Web.UI.WebControls.DataList.OnBubbleEvent(Object source, EventArgs e) +294
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
System.Web.UI.WebControls.DataListItem.OnBubbleEvent(Object source, EventArgs e) +101
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +115
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
System.Web.UI.Page.ProcessRequestMain() +1277
这个怎么解决啊???
解决方案 »
- 使用replace替换模板里的<$f(x)$>标记,其中f(x)指未知的函数或变量
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- 返回起始请求页??
- DataGrid控件(初级问题)
- 水晶报表10中如何将某一字段格式化成百分数?
- 一个关于数据库连接的傻问题
- 如何安装SQL SERVER
- 如何用GridView外的按钮将GridView中的行呈现编辑状态
- 关于使用xsd文件使用MSDataSetGenerator生成的类的问题.高手请进,思归在吗?
- 为什么无法创建WEB项目?(十万火急)
- 这样的值传递怎么实现????
- 想实现这样一个功能:当网站状态为维护中时,无论用户访问哪个网页都将转到我指定的另一个网页 谢谢
If Not IsPostBack Then BindList()
End Sub Sub BindList()
Dim conn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(ConfigurationSettings.AppSettings("LawConnStr"))
Try
Dim rd As System.Data.SqlClient.SqlDataAdapter
Dim ds As DataSet
Dim dv As DataView
Dim sql As String
conn.Open()
sql = "SELECT id,lei3,pro,vprice,num,money FROM dingdan"
rd = New System.Data.SqlClient.SqlDataAdapter(sql, conn)
ds = New DataSet
rd.Fill(ds, "dingdan")
dv = ds.Tables("dingdan").DefaultView
DataList1.DataSource = dv
DataList1.DataBind()
Catch es As Exception
Response.Write("<script language=javascript>" & Chr(13) & "alert('" & es.Message & "'); " & " </script>")
Finally
conn.Close()
End Try
End Sub Sub DataList_UpdateCommand(ByVal sender As Object, ByVal e As DataListCommandEventArgs)
Dim conn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(ConfigurationSettings.AppSettings("LawConnStr"))
Dim number As String = CType(e.Item.FindControl("number"), TextBox).Text
Dim strsql As String = "Update dingdan Set num='" & number & "' where '" & DataList1.DataKeyField & "'=' & DataList1.DataKeys(e.Item.ItemIndex) '"
ExecuteSQL(strsql)
DataList1.EditItemIndex = -1
BindList()
End Sub Sub ExecuteSQL(ByVal strsql As String)
Dim conn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(ConfigurationSettings.AppSettings("LawConnStr"))
Dim sqlSQL As String
Dim Cmd As New System.Data.SqlClient.SqlCommand(sqlSQL, conn)
conn.Open()
Cmd.CommandText = strsql
Cmd.ExecuteNonQuery()
End Sub部分代码如上,为什么会出错啊,可以帮我看看是不是代码写错了吗?
这一行是什么意思?能给他赋值为-1吗?
就是不对DataList1进行编辑操作
操作第一行时e.Item.ItemIndex是0
操作第二行时e.Item.ItemIndex是1可是为什么还是出错啊,异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index
------------------
首先,你这样写很不好,代码较乱,不清晰.改如下
dim myKeyid as string = DataList1.DataKeys(e.Item.ItemIndex).ToString()
dim strsql as string = "Update dingdan Set num = '" & number & "' where 主键ID名 = '" + myKeyid + "' "
其次,你上面的写法有错误,& DataList1.DataKeys(e.Item.ItemIndex) '",后面少了个&"号,前面少了个"号.
再次,你为什么要用DataList1.DataKeyField 这样来取主键名称呢?这样容易出问题
最后,你想用DataKeys的方式来取主键,那么你在绑定的时候,有没有设定主键?如果没有,则取的时候就出问题了.另外,你可用如下方法测试当前的索引号(此处为C#)
try
{
dim myKeyid as string = DataList1.DataKeys(e.Item.ItemIndex).ToString()
}
catch
{
response.write (e.Item.ItemIndex)
response.end()
}
&
number
&
"' where '"
&
DataList1.DataKeyField
&
"'='
&
DataList1.DataKeys(e.Item.ItemIndex) '"看出问题了吧???? 我把你的语句拆开了。你引号没用对
Dim strsql As String = "Update dingdan Set num='" & number & "' where '" & DataList1.DataKeyField & "'=' & DataList1.DataKeys(e.Item.ItemIndex) '"后面(从第3个=开始)改为:
='"&DataList1.DataKeys(e.Item.ItemIndex)&"'"
Dim myKeyid As String = DataList1.DataKeys(e.Item.ItemIndex).ToString()