江湖救急——DataGrid无法更新数据.错误提示:指定的参数已超出有效值的范围。参数名: index
前台代码:
<asp:datagrid id="DataGrid1" style="Z-INDEX: 105; LEFT: 208px; POSITION: absolute; TOP: 8px" runat="server"
Height="232px" Width="370px" OnPageIndexChanged="Page_Changed" AlternatingItemStyle-BackColor="#0099ff" AllowPaging="True" BackColor="#66ffcc"
BorderColor="#000033" GridLines="Vertical" CellPadding="3" PagerStyle-Mode="NextPrev" PagerStyle-NextPageText="下一页" PagerStyle-PrevPageText="上一页"
CellSpacing="0" PagerStyle-Position="TopAndBottom" PagerStyle-HorizontalAlign="Right" PagerStyle-BackColor="#66cc00" PagerStyle-ForeColor="#ccff66"
PageSize="5" HeaderStyle-BackColor="#0033ff" HeaderStyle-ForeColor="#ffffff" AutoGenerateColumns="False" DataKeyField="institute_id" OnEditCommand="myDataGrid_Edit"
OnCancelCommand="myDataGrid_Cancel" OnUpdateCommand="myDataGrid_Update">
<Columns>
<asp:BoundColumn DataField="institute_id" ReadOnly="True" HeaderText="学院代号" HeaderStyle-HorizontalAlign="Center" />
<asp:BoundColumn DataField="institute_name" HeaderText="学院名" HeaderStyle-HorizontalAlign="Center" />
<asp:EditCommandColumn HeaderText="修改" HeaderStyle-HorizontalAlign="Center" ItemStyle-Wrap="False" EditText="修改"
CancelText="取消" UpdateText="更新" />
</Columns>
</asp:datagrid>
后台代码:
Imports System
Imports System.Web
Imports System.Drawing
Imports System.Web.UI.WebControls
Imports System.Collections
Imports System.Data.OleDb
Imports System.Data
Imports System.Web.SessionState
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Data.SqlClient
Imports System.Configuration
Public Class institute_modify
Inherits System.Web.UI.Page
#Region " Web 窗体设计器生成的代码 "
'该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Private myDataSet As DataSet
Private components As System.ComponentModel.Container
Dim dview As DataView
Dim dt As DataTable
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
Dim ConnString As String = ConfigurationSettings.AppSettings("ConnectionString")
Dim Conn As SqlConnection = New SqlConnection(ConnString)
If Not IsPostBack Then
Grid_Bind()
End If
End Sub
Sub Grid_Bind()
Dim ConnString As String = ConfigurationSettings.AppSettings("ConnectionString")
Dim Conn As SqlConnection = New SqlConnection(ConnString)
Dim SelectCommand As String = "select * from institute_information"
Dim MyCommand As SqlDataAdapter = New SqlDataAdapter(SelectCommand, Conn)
Dim DS As DataSet = New DataSet
MyCommand.Fill(DS, "institute_information")
DataGrid1.DataSource = DS.Tables("institute_information").DefaultView
DataGrid1.DataBind()
End Sub
Sub Page_Changed(ByVal Src As Object, ByVal E As DataGridPageChangedEventArgs)
Grid_Bind()
End Sub
Sub myDataGrid_Edit(ByVal sender As Object, ByVal E As DataGridCommandEventArgs)
DataGrid1.EditItemIndex = E.Item.ItemIndex
Grid_Bind()
End Sub
Sub myDataGrid_Cancel(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
DataGrid1.EditItemIndex = -1
Grid_Bind()
End Sub
Sub myDataGrid_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
Dim institute_id As TextBox
Dim institute_name As TextBox
institute_id = DataGrid1.DataKeys(e.Item.ItemIndex)
institute_name = e.Item.FindControl("institute_name")
Dim ConnString As String = ConfigurationSettings.AppSettings("ConnectionString")
Dim Conn As SqlConnection = New SqlConnection(ConnString)
Dim UpdataCmd As String = "UPDATA institute_information SET institute_name=@institute_name WHERE institute_id=@institute_id"
Dim MyCommand As SqlCommand = New SqlCommand(UpdataCmd, Conn)
MyCommand.CommandText = UpdataCmd
MyCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@institute_id", SqlDbType.Char, 10))
MyCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@institute_name", SqlDbType.VarChar, 50))
MyCommand.Parameters("@institute_id").Value = DataGrid1.DataKeys.Item(e.Item.ItemIndex)
MyCommand.Parameters("@institute_name").Value = CType(institute_name.Text, String)
Conn.Open()
MyCommand.Connection = Conn
MyCommand.ExecuteNonQuery()
DataGrid1.EditItemIndex = -1
Conn.Close()
Grid_Bind()
End Sub
Private Sub DataGrid1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.SelectedIndexChanged
End Sub
End Class
错误提示:
指定的参数已超出有效值的范围。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: index
源错误:
行 72: Sub myDataGrid_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
行 73: Dim institute_id As TextBox
行 74: Dim institute_name As TextBox
行 75: institute_id = DataGrid1.DataKeys(e.Item.ItemIndex)
行 76: institute_name = e.Item.FindControl("institute_name")
源文件: G:\wuxiangwu\institute_modify.aspx.vb 行: 74
堆栈跟踪:
[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。
参数名: index]
System.Web.UI.ControlCollection.get_Item(Int32 index) +58
wuxiangwu.institute_modify.myDataGrid_Update(Object sender, DataGridCommandEventArgs e) in G:\wuxiangwu\institute_modify.aspx.vb:74
System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventArgs e) +109
System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e) +507
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e) +106
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
问题点数:20、回复次数:1Top
1 楼dutguoyi(新鲜鱼排)回复于 2006-06-03 11:30:46 得分 0
指定的参数已超出有效值的范围
这个错误一般:
1.有些处理需要先绑定数据再处理(否则没有数据可供处理.)
2.对于Item循环时,需要从0到Items.count-1(而不是Items.count)Top




