Hi Matejx,
I don't know what the problem is but I would probably look in the UpdateGridData procedure for typos. A try and catch block could help you pinpoint the problem. Unfortunately I am not experienced enough to help you With this, as I only know how to use it in a very basic way. Anyway I have posted my code below, (which is working), to help you locate the problem.
I hope this helps,
Sincerely,
Glen Conaway
Here's my code:
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>DataGrid Updates</title>
<meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<script runat="server" language="
vb">
' Declare a Connection object that is global
' in scope to this script...
Dim objConnection As SqlConnection
Sub Page_Load(Sender As Object, E As EventArgs)
objConnection = New _
SqlConnection("Server=MyComputer\NetSdk;Trusted_Co nnection=true;Initial Catalog=Pubs")
' I have found the following connections strings successfull in the datagrid sorting program:
'objConnection = New SqlConnection("Server=MyComputer\NetSdk;database=p ubs;Integrated Security=sspi")
'objConnection = New SqlConnection("Server=MyComputer\NetSdk;Trusted_Co nnection=True;database=pubs")
'objConnection = New SqlConnection("Server=MyComputer\NetSdk;Trusted_Co nnection=True;Initial Catalog=pubs")
If Not (IsPostBack)
BindGrid()
End If
End Sub
Sub BindGrid()
Dim objDataSet As DataSet
Dim objDataAdapter As SqlDataAdapter
objDataAdapter = New SqlDataAdapter( _
"SELECT au_lname, au_fname, titles.title_id, title, price " & _
"From authors " & _
"JOIN titleauthor ON authors.au_id = titleauthor.au_id " & _
"JOIN titles ON titleauthor.title_id = titles.title_id " & _
"ORDER BY au_lname, au_fname", _
objConnection)
objDataSet = New DataSet()
objDataAdapter.Fill(objDataSet, "Authors")
grdAuthors.DataSource = objDataSet
grdAuthors.DataBind()
End Sub
Sub EditGridData(Sender As Object, E As DataGridCommandEventArgs)
grdAuthors.EditItemIndex = CInt(E.Item.ItemIndex)
BindGrid()
End Sub
Sub CancelGridData(Sender As Object, E As DataGridCommandEventArgs)
grdAuthors.EditItemIndex = -1
BindGrid()
End Sub
Sub UpdateGridData(Sender As Object, E As DataGridCommandEventArgs)
Dim objCommand As SqlCommand
Dim objTextBox As TextBox
Dim strSQL As String = "UPDATE titles " & _
"SET title = @Title, price = @Price " & _
"WHERE title_id = @ID"
objCommand = New SqlCommand(strSQL, objConnection)
objCommand.Parameters.Add(New SqlParameter("@ID", _
SqlDbType.VarChar, 6))
objCommand.Parameters.Add(New SqlParameter("@Title", _
SqlDbType.VarChar, 80))
objCommand.Parameters.Add(New SqlParameter("@Price", _
SqlDbType.Money, 8))
objCommand.Parameters("@Id").Value = _
grdAuthors.DataKeys(CInt(E.Item.ItemIndex))
objTextBox = E.Item.FindControl("edit_title")
objCommand.Parameters("@Title").Value = objTextBox.Text
objTextBox = E.Item.FindControl("edit_price")
If Left(objTextBox.Text,1) = "$" Then
objTextBox.Text = Right(objTextBox.Text,Len(objTextBox.Text)-1)
End If
objCommand.Parameters("@Price").Value = objTextBox.Text
objCommand.Connection.Open()
objCommand.ExecuteNonQuery()
grdAuthors.EditItemIndex = -1
objCommand.Connection.Close()
BindGrid()
End Sub
</script>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="grdAuthors" style="Z-INDEX: 101; LEFT: 13px; POSITION: absolute; TOP: 12px" runat="server" AlternatingItemStyle-BackColor="WhiteSmoke" AutoGenerateColumns="false" BackColor="White" CellPadding="3" DataKeyField="title_id" Font-Name="Verdana" Font-Size="8pt" GridLines="None" HeaderStyle-BackColor="Maroon" HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="White" OnEditCommand="EditGridData" OnCancelCommand="CancelGridData" OnUpdateCommand="UpdateGridData">
<Columns>
<asp:EditCommandColumn EditText="Edit Row" CancelText="Cancel Edit" UpdateText="Update Row" Itemstyle-wrap="False" />
<asp:BoundColumn DataField="title_id" Visible="False" />
<asp:BoundColumn DataField="au_lname" HeaderText="Last Name" ReadOnly="True" ItemStyle-Wrap="False" />
<asp:BoundColumn DataField="au_fname" HeaderText="First Name" ReadOnly="True" ItemStyle-Wrap="False" />
<asp:TemplateColumn HeaderText="Title" ItemStyle-Wrap="False">
<ItemTemplate>
<asp:Label Runat="server"
Text='<%# DataBinder.Eval (Container.DataItem, "Title") %>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox Runat="server"
ID="edit_Title"
Font-Name="Verdana"
Font-Size="8pt"
Width="400"
Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>'/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Price" HeaderStyle-Font-Bold="True" ItemStyle-HorizontalAlign="Right">
<ItemTemplate>
<asp:Label Runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "price", "{0:C2}")%>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox Runat="server"
ID="edit_price"
Font-Name="Verdana"
Font-Size="8pt"
Width="50"
Text='<%# DataBinder.Eval(Container.DataItem, "price", "{0:C2}") %>'/>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</HTML>