Here is a MS example in VB[1]. ASP.NET is not like windows forms or
console applications when it comes to where data is remembered between
call. In order for the server to know what data should be displayed
either session state is needed or you must specify the DataSource on all
page requests. Notice the code below calls the sub BindData() once for
each page request. With out it how does ASP.NET know what data to use?

If you are using session state try not doing the DataBind() at all, it
should remember.

HTH

Jay

[1]
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<html>

<script language="VB" runat="server">

    Dim MyConnection As SqlConnection

    Sub Page_Load(Sender As Object, E As EventArgs)

        MyConnection = New
SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=ye
s")

        If Not (IsPostBack)
            BindGrid()
        End If
    End Sub

    Sub MyDataGrid_Edit(Sender As Object, E As DataGridCommandEventArgs)

        MyDataGrid.EditItemIndex = CInt(E.Item.ItemIndex)
        BindGrid()
    End Sub

    Sub MyDataGrid_Cancel(Sender As Object, E As
DataGridCommandEventArgs)

        MyDataGrid.EditItemIndex = -1
        BindGrid()
    End Sub

    Sub MyDataGrid_Update(Sender As Object, E As
DataGridCommandEventArgs)

        Dim DS As DataSet
        Dim MyCommand As SqlCommand

        Dim UpdateCmd 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(UpdateCmd, MyConnection)

        MyCommand.Parameters.Add(New SqlParameter("@Id",
SqlDbType.NVarChar, 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.NChar, 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.NChar, 2))
        MyCommand.Parameters.Add(New SqlParameter("@Zip",
SqlDbType.NChar, 5))
        MyCommand.Parameters.Add(New SqlParameter("@Contract",
SqlDbType.NVarChar,1))

        MyCommand.Parameters("@Id").Value =
MyDataGrid.DataKeys(CInt(E.Item.ItemIndex))

        Dim Cols As String() =
{"@Id","@LName","@FName","@Phone","@Address","@City","@State","@Zip","@C
ontract"}

        Dim NumCols As Integer = E.Item.Cells.Count

        Dim I As Integer
        For I=2 To NumCols-2 'skip first, second and last column

            Dim CurrentTextBox As TextBox
            CurrentTextBox = E.Item.Cells(I).Controls(0)
            Dim ColValue As String = CurrentTextBox.Text

            ' Check for null values in required fields
            If I<6 And ColValue = ""

                Message.InnerHtml = "ERROR: Null values not allowed for
Author ID, Name or Phone"
                Message.Style("color") = "red"
                Return
            End If

            MyCommand.Parameters(Cols(I-1)).Value = ColValue
        Next

        ' Append last row, converting true/false values to 0/1
        Dim ContractTextBox As TextBox
        ContractTextBox = E.Item.Cells(NumCols-1).Controls(0)
        If ContractTextBox.Text = "true"
                    MyCommand.Parameters("@Contract").Value =  "1"
        Else
                    MyCommand.Parameters("@Contract").Value =  "0"
        End If

        MyCommand.Connection.Open()

        Try
            MyCommand.ExecuteNonQuery()
            Message.InnerHtml = "<b>Record Updated</b><br>" &
UpdateCmd.ToString()
            MyDataGrid.EditItemIndex = -1
        Catch Exp As SQLException
            If Exp.Number = 2627
                Message.InnerHtml = "ERROR: A record already exists with
the same primary key"
            Else
                Message.InnerHtml = "ERROR: Could not update record,
please ensure the fields are correctly filled out"
            End If
            Message.Style("color") = "red"
        End Try

        MyCommand.Connection.Close()

        BindGrid()
    End Sub

    Sub BindGrid()

        Dim DS As DataSet
        Dim MyCommand As SqlDataAdapter
        MyCommand = new SqlDataAdapter("select * from Authors",
MyConnection)

        DS = new DataSet()
        MyCommand.Fill(DS, "Authors")

        MyDataGrid.DataSource=DS.Tables("Authors").DefaultView
        MyDataGrid.DataBind()
    End Sub

</script>

<body style="font: 10pt verdana">

  <form runat="server">

    <h3><font face="Verdana">Updating a Row of Data</font></h3>

    <span id="Message" EnableViewState="false" style="font: arial 11pt;"
runat="server"/><p>

    <ASP:DataGrid id="MyDataGrid" runat="server"
      Width="800"
      BackColor="#ccccff"
      BorderColor="black"
      ShowFooter="false"
      CellPadding=3
      CellSpacing="0"
      Font-Name="Verdana"
      Font-Size="8pt"
      HeaderStyle-BackColor="#aaaadd"
      OnEditCommand="MyDataGrid_Edit"
      OnCancelCommand="MyDataGrid_Cancel"
      OnUpdateCommand="MyDataGrid_Update"
      DataKeyField="au_id"
    >

      <Columns>
        <asp:EditCommandColumn EditText="Edit" CancelText="Cancel"
UpdateText="Update" ItemStyle-Wrap="false"/>
      </Columns>

    </ASP:DataGrid>

  </form>

</body>
</html>

-----Original Message-----
From: dotnet discussion [mailto:[EMAIL PROTECTED]] On Behalf Of
Marina Zlatkina
Sent: Friday, April 12, 2002 4:13 PM
To: [EMAIL PROTECTED]
Subject: Re: [DOTNET] DataGrid

The DataGrid object is bound to a data source in the designer. But I
have
also tried explicitly setting the DataSource property again in that
event
handler, which didn't change anything.
The strange thing is, if after I get this empty DataGrid, I click the
button that gets me the data in the first place, I get the original
DataGrid, with the appropriate row in edit mode!

But that seems inherintly wrong, that I need to try to get the data
again,
before I can edit...

You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to