Change enableviewstate to true on your datagrid
-----Original Message-----
From: Nick Taylor [mailto:nicktaylor@s...]
Sent: 4. mars 2003 18:15
To: ASPX_Professional
Subject: [aspx_professional] Re: SV: Can't Update Datagrid or XML File
Bound to It
I understand what you're saying and it makes sense, but it doesn't work.
I
did some debugging the other day and realized that the edit event only
fires after the page_load (like you said). So I did what you suggested
but
as soon as the datagrids do not bind in the page_load (when Not
Page.IsPostBack), the OnEdit event for the datagrid never fires. I also
noticed that my OnUpdate event never fires as well. Any other ideas? You
can try out this code if you go to www.rugbyincanada.com/test.aspx . You
can also see my old code when the edit event fires by going to
www.rugbyincanada.com/test2.aspx .
Below is the code with your suggestions:
<%@ import Namespace=3D"System.Data" %>
<script runat=3D"server">
Public objDataSet As New DataSet()=09
Public strXMLFile As String
Sub Page_Load(Source As Object, E As EventArgs)
=09
Call Alert("Page_Load")
If Not Page.IsPostBack Then
Call BindDatagrids =09
End If
End Sub
=09
Private Sub BindDatagrids()
=09
If Trim(dlProvince.SelectedItem.Value) <>
Trim(strXMLFile)
Then
strXMLFile =3D dlProvince.SelectedItem.Value
objDataSet.ReadXML(Server.MapPath("/ric/xml/" &
strXMLFile & ".xml"))
End If
=09
Try
dgUnion.DataSource =3D objDataSet.Tables("union")=09
=09
dgRegionalUnions.DataSource =3D objDataSet.Tables
("regional_union")
dgClubs.DataSource =3D objDataSet.Tables("club")=09
Page.DataBind()
Catch objError As Exception
'Don't need anything
Finally
'Don't need anything
End Try=09
End Sub
Private Sub DoItemEdit(objSource As Object, objArgs As
DataGridCommandEventArgs)
=09
Call Alert("Edit") =09
objSource.EditItemIndex =3D objArgs.Item.ItemIndex
Call BindDatagrids =09
End Sub
=09
Private Sub DoItemCancel(objSource As Object, objArgs As
DataGridCommandEventArgs)
Call Alert("Cancel")
objSource.EditItemIndex =3D -1
Call BindDatagrids =09
=09
End Sub
=09
Private Sub DoItemUpdate(objSource As Object, objArgs As
DataGridCommandEventArgs)
=09
Dim Name As Textbox
Dim URL As Textbox
=09
Name =3DobjArgs.Item.FindControl("txtNameUnion")
URL =3DobjArgs.Item.FindControl("txtUrlUnion")
=09
Call Alert(Name.Text & " " & URL.Text) =09
objDataSet.WriteXML(Server.MapPath("/ric/xml/" &
strXMLFile & ".xml"))
objSource.EditItemIndex =3D -1
Call BindDatagrids =09
=09
End Sub=09
=09
Private Function Alert(pstrString As String) As String
=09
Response.Write("<scr" & "ipt language=3D'javascript'>alert
('" & pstrString & "');</scr" & "ipt>")
End Function
</script>
<html>
<head>
<script language=3D"javascript">
<!--
if (document.layers) {
document.write("<link href=3D'../css/nn4_ric.css'
type=3D'text/css' rel=3D'stylesheet' />");
}
else {
document.write("<link href=3D'../css/ric.css'
type=3D'text/css'
rel=3D'stylesheet' />");
}
// -->
</script>
</head>
<body>
<form runat=3D"server">
<asp:DropDownList id=3D"dlProvince" runat=3D"server"
autopostback=3D"True" CssClass=3D"dropdown">
<asp:ListItem Value=3D"ab"
selected=3D"True">Alberta</asp:ListItem>
<asp:ListItem Value=3D"bc">British Columbia</asp:ListItem>
<asp:ListItem Value=3D"ma">Manitoba</asp:ListItem>
<asp:ListItem Value=3D"nb">New Brunswick</asp:ListItem>
<asp:ListItem Value=3D"nf">Newfoundland</asp:ListItem>
<asp:ListItem Value=3D"ns">Nova Scotia</asp:ListItem>
<asp:ListItem Value=3D"on">Ontario</asp:ListItem>
<asp:ListItem Value=3D"pei">Prince Edward
Island</asp:ListItem>
<asp:ListItem Value=3D"qc">Quebec</asp:ListItem>
<asp:ListItem Value=3D"sk">Saskatchewan</asp:ListItem>
</asp:DropDownList>
<h4>Union
</h4>
<asp:DataGrid id=3D"dgUnion" EnableViewState=3D"false"
runat=3D"server"
ForeColor=3D"White" BackColor=3D"Black" OnEditCommand=3D"DoItemEdit"
OnCancelCommand=3D"DoItemCancel" OnUpdateCommand=3D"DoItemUpdate"
AutoGenerateColumns=3D"false" BorderWidth=3D"1px">
<EditItemStyle cssclass=3D"editRow" />
<Columns>
<asp:TemplateColumn HeaderText=3D"Union">
<ItemTemplate>
<asp:label
text=3D'<%#Container.DataItem("name")%>'
runat=3D"server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox id=3D"txtNameUnion" size=3D"30"
Text=3D'<% #Container.DataItem("name")%>' runat=3D"server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText=3D"Web Site">
<ItemTemplate>
<asp:label
text=3D'<%#Container.DataItem("url")%>'
runat=3D"server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox id=3D"txtUrlUnion" size=3D"30"
Text=3D'<%
#Container.DataItem("url")%>' runat=3D"server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType=3D"LinkButton"
UpdateText=3D"Update" CancelText=3D"Cancel"
EditText=3D"Edit"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>
<h4>Regional Unions
</h4>
<asp:DataGrid id=3D"dgRegionalUnions" EnableViewState=3D"false"
runat=3D"server" ForeColor=3D"White" BackColor=3D"Black"
OnEditCommand=3D"DoItemEdit" OnCancelCommand=3D"DoItemCancel"
OnUpdateCommand=3D"DoItemUpdate" AutoGenerateColumns=3D"false"
BorderWidth=3D"1px">
<Columns>
<asp:templatecolumn HeaderText=3D"Regional Union">
<ItemTemplate>
<asp:label
text=3D'<%#Container.DataItem("name")%>'
runat=3D"server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox id=3D"txtNameRegional" size=3D"30"
Text=3D'<%#Container.DataItem("name")%>' runat=3D"server" />
</EditItemTemplate>
</asp:templatecolumn>
<asp:templatecolumn HeaderText=3D"Web Site">
<ItemTemplate>
<asp:label
text=3D'<%#Container.DataItem("url")%>'
runat=3D"server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox id=3D"txtUrlRegional" size=3D"30"
Text=3D'<% #Container.DataItem("url")%>' runat=3D"server" />
</EditItemTemplate>
</asp:templatecolumn>
<asp:editcommandcolumn EditText=3D"Edit"
CancelText=3D"Cancel"
UpdateText=3D"Update"></asp:editcommandcolumn>
</Columns>
</asp:DataGrid>
<h4>Clubs
</h4>
<asp:DataGrid id=3D"dgClubs" EnableViewState=3D"false"
runat=3D"server"
ForeColor=3D"White" BackColor=3D"Black" OnEditCommand=3D"DoItemEdit"
OnCancelCommand=3D"DoItemCancel" OnUpdateCommand=3D"DoItemUpdate"
AutoGenerateColumns=3D"false" BorderWidth=3D"1px">
<Columns>
<asp:templatecolumn HeaderText=3D"Club">
<ItemTemplate>
<asp:label
text=3D'<%#Container.DataItem("name")%>'
runat=3D"server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox id=3D"txtName" size=3D"30"
Text=3D'<%
#Container.DataItem("name")%>' runat=3D"server" />
</EditItemTemplate>
</asp:templatecolumn>
<asp:templatecolumn HeaderText=3D"Club">
<ItemTemplate>
<asp:label
text=3D'<%#Container.DataItem("url")%>'
runat=3D"server" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox id=3D"txtUrl" size=3D"30"
Text=3D'<%
#Container.DataItem("url")%>' runat=3D"server" />
</EditItemTemplate>
</asp:templatecolumn>
<asp:editcommandcolumn EditText=3D"Edit"
CancelText=3D"Cancel"
UpdateText=3D"Update"></asp:editcommandcolumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
> When you click Edit, your DoItemEdit method is fired on the server.
> Here
you need to add the call to your BindDatagrids method. Therefore you
also need the check for IsPostBack in Page_Load.
Page_Load always fires before server events fired by page components