I noticed a lot of people have had lots of problems with chapter 17. Here is my code for the DataGrid Updates example. It is fully functionaly, after several hours of debugging typos :), so I hope it helps. Sorry about the formatting as it wraps around in some places as I just copy and pasted the code from the aspx document.
Webform1.aspx
<%@ 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.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="VBScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<script runat=server language=
vb>
Dim objConnection as SqlConnection
sub Page_Load(Sender as Object, E as EventArgs)
objConnection=new SqlConnection("Server=(local);Initial Catalog=Pubs;User ID=sa;Password=pheonix;")
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, 66))
objCommand.Parameters.Add(New SqlParameter("@Title", SqldbType.VarChar, 80))
objCommand.Parameters.Add(New SqlParameter("@Price", SqldbType.Money, 6))
objCommand.Parameters("@ID").Value=grdAuthors.Data Keys(CInt(E.Item.ItemIndex))
objTextBox=E.Item.FindControl("edit_title")
objCommand.Parameters("@Title").Value=objTextBox.T ext
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.T ext
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: 16px; POSITION: absolute; TOP: 40px"
runat="server" Width="424px" Height="256px"
AutoGenerateColumns="False"
CellPadding="3"
DataKeyField="title_id"
Font-Names="Verdana"
Font-Size="8pt"
GridLines="None"
AlternatingItemStyle-BackColor="WhiteSmoke"
HeaderStyle-Font-Bold="True"
HeaderStyle-ForeColor="White"
HeaderStyle-BackColor="Maroon"
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>