hi there... hope all is well
i am going through the tutorial of asp.net quickstart tutorial and i was working on one of the examples of Server-Side Data Access - Updating data in sql Database using sql database with datagrid editCommandColumn.. i am using vb.net ... i have done everything as the examplie specifies but i am getting this error and i cant seem to understand how to solve it can someone please help .. i would really appreciate it...
This is the error i get in my aspx.vb file
Specified argument was out of the range of valid values. Parameter name: index
this is the html code which i have in my aspx file
Code:<form id="Form1" method="post" runat="server"> <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" BorderColor="#003366" BorderWidth="6px" CellPadding="5" OnEditCommand="DataGrid1_EditCommand" OnCancelCommand="DataGrid1_CancelCommand" OnUpdateCommand="DataGrid1_Updatecommand" DataKeyField="au_id" OnItemDataBound="DataGrid1_ItemDataBound" EnableViewState="False"> <AlternatingItemStyle Font-Size="Smaller" Font-Names="Century" ForeColor="Black" BackColor="Cornsilk"></AlternatingItemStyle> <ItemStyle Font-Size="Smaller" Font-Names="Century" ForeColor="Black" BackColor="Snow"></ItemStyle> <HeaderStyle Font-Size="Smaller" Font-Names="Century" ForeColor="Black" BackColor="Snow"></HeaderStyle> <FooterStyle ForeColor="Black" BackColor="Snow"></FooterStyle> <Columns> <asp:BoundColumn HeaderText="au_id" SortExpression="au_id" ReadOnly="True" DataField="au_id" ItemStyle-Wrap="false" /> <asp:BoundColumn HeaderText="au_lname" SortExpression="au_lname" DataField="au_lname" /> <asp:BoundColumn HeaderText="au_fname" SortExpression="au_fname" DataField="au_fname" /> <asp:BoundColumn HeaderText="phone" SortExpression="phone" DataField="phone" /> <asp:BoundColumn HeaderText="address" SortExpression="address" DataField="address" /> <asp:BoundColumn HeaderText="city" SortExpression="city" DataField="city" /> <asp:BoundColumn HeaderText="state" SortExpression="state" DataField="state" /> <asp:BoundColumn HeaderText="zip" SortExpression="zip" DataField="zip" /> <asp:BoundColumn HeaderText="contract" SortExpression="contract" DataField="contract" /> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn> </Columns> </asp:DataGrid> <br> <asp:Label id="lblmessage" runat="server"></asp:Label> </form>
this is the code which i have in the aspx.vb file
would appreciate if someone could help thank in advanceCode:imports system.data imports system.data.sqlClient Dim myconn As SqlConnection Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here myconn = New SqlConnection(ConfigurationSettings.AppSettings("SONIA")) datagridDB() End Sub Public Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand DataGrid1.EditItemIndex = -1 datagridDB() End Sub Sub datagridDB() Dim adaptAuthors As New SqlDataAdapter("SELECT * FROM Authors", myconn) Dim dsAuthors As New DataSet adaptAuthors.Fill(dsAuthors, "Authors") DataGrid1.DataSource = dsAuthors.Tables("Authors").DefaultView DataGrid1.DataBind() End Sub Public Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand DataGrid1.EditItemIndex = CInt(e.Item.ItemIndex) datagridDB() End Sub Public Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound If (e.Item.ItemType = ListItemType.EditItem) Then Dim i As Integer For i = 0 To e.Item.Controls.Count - 1 Try If (e.Item.Controls(i).Controls(0).GetType().ToString() = "System.Web.UI.WebControls.TextBox") Then Dim tb As TextBox tb = e.Item.Controls(i).Controls(0) tb.Text = Server.HtmlDecode(tb.Text) End If Catch End Try Next End If End Sub Public Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand Dim ds As New DataSet Dim mycommand As SqlCommand Dim UpdateCommand As String = "UPDATE Authors SET au_id = @id, au_lname = @lname,au_fname=@fname,phone=" _ & " @phone,address = @address, city = @city, state = @state, zip= @zip, contract = @contract WHERE au_id= @id " mycommand = New SqlCommand(UpdateCommand, myconn) mycommand.Parameters.Add(New SqlParameter("@id", SqlDbType.VarChar, 11)) mycommand.Parameters.Add(New SqlParameter("@lname", SqlDbType.NVarChar, 40)) mycommand.Parameters.Add(New SqlParameter("@fname", SqlDbType.NVarChar, 20)) mycommand.Parameters.Add(New SqlParameter("@phone", SqlDbType.NVarChar, 12)) mycommand.Parameters.Add(New SqlParameter("@address", SqlDbType.NVarChar, 40)) mycommand.Parameters.Add(New SqlParameter("@city", SqlDbType.NVarChar, 20)) mycommand.Parameters.Add(New SqlParameter("@state", SqlDbType.NVarChar, 2)) mycommand.Parameters.Add(New SqlParameter("@zip", SqlDbType.NVarChar, 5)) mycommand.Parameters.Add(New SqlParameter("@contract", SqlDbType.NVarChar, 1)) mycommand.Parameters("@id").Value = DataGrid1.DataKeys(CInt(e.Item.ItemIndex)) Dim cols As String() = {"@id", "@lname", "@fname", "@phone", "@address", "@city", "@state", "@zip", "@contract"} Dim numcols As Integer = e.Item.Cells.Count Dim I As Integer For I = 2 To numcols - 2 'skip the first and the second last columns Dim currenttextbox As TextBox currenttextbox = e.Item.Cells(I).Controls(0) 'i get this error here: Specified argument was out of the range of valid values. Parameter name: index Dim colValue As String = currenttextbox.Text 'check for null values in the required fields If I < 6 And colValue = "" Then lblmessage.Text = "ERROR:Null values are not allowed for AuthorId,Phone,Name" lblmessage.Style("color") = "red" Return End If mycommand.Parameters(cols(I - 1)).Value = Server.HtmlEncode(colValue) Next 'append the last row by changing to true/false values to 1 or 0 Dim ContractTextbox As TextBox 'i get this error here also: Specified argument was out of the range of valid values. Parameter name: index ContractTextbox = e.Item.Cells(numcols - 1).Controls(0) If ContractTextbox.Text = "true" Then mycommand.Parameters("@contract").Value = "1" Else mycommand.Parameters("@contract").Value = "0" End If myconn.Open() Try mycommand.ExecuteNonQuery() lblmessage.Text = "<b>Record Updated</b><br>" + UpdateCommand.ToString() lblmessage.Style("color") = "red" Catch ex As SqlException If ex.Number = 2627 Then lblmessage.Text = "ERROR: A record already exists with this primary key" Else lblmessage.Text = "ERROR: Could not update the field make sure that the fields are all filled" End If lblmessage.Style("color") = "red" End Try myconn.Close() datagridDB() End Sub




Reply With Quote