In-place Updating in Datagrid not working

  • Thread starter Thread starter A P
  • Start date Start date
A

A P

Hi!

I have created a sample datagrid that can update data on a database. Please
help me solve the problem, I have attached both aspx and code behind
(aspx.vb):

______________________

datagrid.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DataGrid.aspx.vb"
Inherits="vs_2310.DataGrid"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>DataGrid</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="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid id=DataGrid1 style="Z-INDEX: 101; LEFT: 51px; POSITION:
absolute; TOP: 51px" runat="server" DataSource="<%# DataSet21 %>"
DataKeyField="NounID" BorderColor="#CC9966" BorderStyle="None"
BorderWidth="1px" BackColor="White" CellPadding="4" Font-Size="10pt"
AutoGenerateColumns="False" Font-Names="Arial" AllowPaging="True">
<SelectedItemStyle Font-Bold="True" ForeColor="#663399"
BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC"
BackColor="#990000"></HeaderStyle>
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="NounID" SortExpression="NounID"
HeaderText="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="NounDesc" SortExpression="NounDesc"
HeaderText="Noun"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Action">
<ItemTemplate>
<asp:LinkButton runat="server" Text="Edit" CommandName="Edit"
CausesValidation="false"></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton runat="server" Text="Update"
CommandName="Update"></asp:LinkButton>&nbsp;
<asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel"
CausesValidation="false"></asp:LinkButton>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099"
BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>
<asp:Label id="Label1" style="Z-INDEX: 102; LEFT: 51px; POSITION:
absolute; TOP: 17px" runat="server">Label</asp:Label>
</form>
</body>
</HTML>

________________________

datagrid.aspx.vb

Imports System.Data.OleDb
Public Class DataGrid
Inherits System.Web.UI.Page


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
OleDbDataAdapter1.Fill(DataSet21)
DataGrid1.DataBind()
End Sub

Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.EditCommand
DataGrid1.EditItemIndex() = e.Item.ItemIndex
DataGrid1.DataBind()
End Sub
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.UpdateCommand
Dim NounTable As DataSet2.tbltsNounDataTable

NounTable = DataSet21.tbltsNoun

Dim rowToUpdate As DataSet2.tbltsNounRow

rowToUpdate = NounTable.Rows(e.Item.ItemIndex)
rowToUpdate.NounDesc = CType(e.Item.Cells(1).Controls(0),
TextBox).Text

OleDbDataAdapter1.Update(DataSet21)
Label1.Text = rowToUpdate.NounDesc

DataGrid1.EditItemIndex = -1
DataGrid1.DataBind()
End Sub

Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e
As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles
DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
DataGrid1.DataBind()
End Sub

Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.CancelCommand
DataGrid1.EditItemIndex = -1
DataGrid1.DataBind()
End Sub
End Class

___________________
 
Hey, A P,

what *is* the problem you have ?



Juan T. Llibre
ASP.NET MVP
http://asp.net.do/foros/
Foros de ASP.NET en Español
Ven, y hablemos de ASP.NET...
======================

A P said:
Hi!

I have created a sample datagrid that can update data on a database.
Please
help me solve the problem, I have attached both aspx and code behind
(aspx.vb):

....code snipped.
 
Data is not updating. I've already check on the database and the content is
not changed if I click on the update link. I'm using MS Access for the
database.

Me
 
AP,

This is a lot of code, first of all would I change what happen in the load
event in something like this (typed in this message so watch typos).


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
If Not IsPostBack then
OleDbDataAdapter1.Fill(DataSet21)
session.item("ds21") = DataSet21
Else
Dataset21 = directcast(session.Item("ds21"), dataset)
End if
DataGrid1.DataSource = Dataset21
DataGrid1.DataBind()
End Sub

And than see what happens.

Cor
 
Cor,

Same output. No change on the field. Much better, if its OK with you to post
a simple code that uses Datagrid on Access Database that can update values.
Hope that you'll grant my request.

regards,
Me
 
AP,
Same output. No change on the field. Much better, if its OK with you to
post
a simple code that uses Datagrid on Access Database that can update
values.
Hope that you'll grant my request.

At your service, I never use the designer so it was more work than I thought

\\\
'This is a simple project without any error trapping
'Create a new project
'Select an oledbdataadapter
'Use a Northwind MDB
'Select Employees and from that EmployeeID, FirstName, LastName
'Generate a dataset
'Drag a datagrid and set in the propertybuilder the datasource, datamember
'set the Edit, Cancel, Update column, datacolumns in the sequence Id,
FirstName, Lastname

'And than this code
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
OleDbDataAdapter1.Fill(DataSet11)
Session.Item("ds21") = DataSet11
DataGrid1.DataBind()
Else
DataSet11 = DirectCast(Session.Item("ds21"), DataSet1)
End If
DataGrid1.DataSource = DataSet11
End Sub
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As _
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles _
DataGrid1.EditCommand
DataGrid1.EditItemIndex() = e.Item.ItemIndex
DataGrid1.DataBind()
End Sub
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As _
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles _
DataGrid1.UpdateCommand
Dim dv As New DataView(DataSet11.Employees)
dv.RowFilter = "EmployeeID = '" _
& DirectCast(e.Item.Cells(1).Controls(0), TextBox).Text & "'"
dv(0)("FirstName") = DirectCast(e.Item.Cells(2).Controls(0),
TextBox).Text
dv(0)("LastName") = DirectCast(e.Item.Cells(3).Controls(0),
TextBox).Text
OleDbDataAdapter1.Update(DataSet11.Employees)
Session.Item("ds21") = DataSet11
DataGrid1.DataBind()
End Sub
Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As _
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles _
DataGrid1.CancelCommand
DataGrid1.EditItemIndex = -1
DataGrid1.DataBind()
End Sub
End Class
///
 
Thanks Cor! I already made it but I need to study first the code since I
have no idea on the "Session.Item" thing and "DirectCast". Thanks again.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top