Wrox Home  
Search P2P Archive for: Go

  Return to Index  

aspx_beginners thread: Updating Database-Table


Message #1 by "F-J Mattmann" <f-j.mattmann@e...> on Tue, 29 Oct 2002 06:35:27
Help please, I really can´t figure out what is the problem, 
get the error: 
Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the 
current web request. Please review the stack trace for more information 
about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set 
to an instance of an object.

Source Error: 


Line 97:             Dim CurrentTextBox As TextBox
Line 98:                  CurrentTextBox = E.Item.FindControl("edit_" & 
Cols(I))
Line 99:                  Dim ColValue As String = CurrentTextBox.Text
Line 100:    
Line 101:    
 
-----------------
here is the code:
------------------
<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">

    
         Dim MyConnection As SqlConnection
         Public stadIndex As Hashtable
    
         Sub Page_Load(Src As Object, E As EventArgs)
    
                MyConnection = New SqlConnection
("server=174.22.16.34;database=test;UID=sa")
    
             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 perioddata SET ID = @ID, 
id_styrtal = @id_styrtal, period = @period, utfall = " _
                   & " @utfall, målvärdet = @målvärdet, kommentar = 
@kommentar where ID = @ID"
    
              
            
              MyCommand = New SqlCommand(UpdateCmd, MyConnection)
    
              MyCommand.Parameters.Add(New SqlParameter("@ID", 
SqlDbType.NVarChar, 10))
              MyCommand.Parameters.Add(New SqlParameter("@id_styrtal", 
SqlDbType.NVarChar, 15))
              MyCommand.Parameters.Add(New SqlParameter("@period", 
SqlDbType.NVarChar, 18))
             MyCommand.Parameters.Add(New SqlParameter("@utfall", 
SqlDbType.NVarChar, 20))
              MyCommand.Parameters.Add(New SqlParameter("@målvärdet", 
SqlDbType.NVarChar, 8))
             MyCommand.Parameters.Add(New SqlParameter("@kommentar", 
SqlDbType.NChar, 12))
    
     
 MyCommand.Parameters("@ID").Value = MyDataGrid.DataKeys(CInt
(E.Item.ItemIndex))
    
               Dim Cols As String() = 
{"ID","id_styrtal","period","utfall","målvärdet","kommentar"}
    
       
             Dim I As Integer
    
   
       For I = 0 To 5
            Dim CurrentTextBox As TextBox
                 CurrentTextBox = E.Item.FindControl("edit_" & Cols(I))
                 Dim ColValue As String = CurrentTextBox.Text
    
    
            ''''' Kolla om användaren har fyllt i alla fält:'''''''''''''
    
                dim test as string=(colvalue)
    
                If (Ltrim(Rtrim(colvalue)))=""
                             Message.InnerHtml = "Fel: Du måste fylla i 
alla fält!"
                         Message.Style("color") = "red"
                         Return
                     End If
    
                     MyCommand.Parameters("@" & Cols(I)).Value = 
Server.HtmlEncode(ColValue)
       Next
    
    
    ''''''''''''''''''''''''''''''''''''''''''''
    
    
             MyCommand.Connection.Open()
    
             Try
                 MyCommand.ExecuteNonQuery()
                 Message.InnerHtml = "<b>Posten är uppdaterad enl. 
följande:</b><br>" & UpdateCmd
                 MyDataGrid.EditItemIndex = -1
             Catch Exp As SqlException
                 If Exp.Number = 2627
                     Message.InnerHtml = "Fel: det finns redan en post med 
denna primärnyckeln"
                 Else
                     Message.InnerHtml = "Fel: kunde inte uppdatera 
posten, kolla om allt är rätt ifyllt"
                 End If
                 Message.Style("color") = "red"
             End Try
    
             MyCommand.Connection.Close()
    
             BindGrid()
         End Sub
    
         Sub MyDataGrid_ItemDataBound(Sender As Object, E As 
DataGridItemEventArgs)
             If (e.Item.ItemType = ListItemType.EditItem) Then
                 Dim i As Integer
                 For i = 0 To e.Item.Controls.Count-1
                     Try
                         If (e.Item.Controls(i).Controls(1).GetType
().ToString() = "System.Web.UI.WebControls.TextBox") Then
                             Dim tb As TextBox
                             tb = e.Item.Controls(i).Controls(1)
                             tb.Text = Server.HtmlDecode(tb.Text)
                         End If
                     Catch
    
                     End Try
                 Next
             End If
         End Sub
    
         Sub BindGrid()
    
             Dim DS As DataSet
             Dim MyCommand As SqlDataAdapter
             MyCommand = new SqlDataAdapter("select * from periodData", 
MyConnection)
    
             DS = new DataSet()
             MyCommand.Fill(DS, "periodData")
    
             MyDataGrid.DataSource=DS.Tables("periodData").DefaultView
             MyDataGrid.DataBind()
         End Sub

</script>
<html>

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

  <form runat="server">

    <h3><font face="Verdana">Att redigera och updatera en rad (post)
</font></h3>

    <span id="Message" EnableViewmålvärde1="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="ID"
      AutoGenerateColumns="false"
      OnItemDataBound="MyDataGrid_ItemDataBound"
    >

      <Columns>
        <asp:EditCommandColumn EditText="Editera" CancelText="ångra" 
UpdateText="Uppdatera"  ItemStyle-Wrap="false"/>
        <asp:BoundColumn HeaderText="ID" SortExpression="ID" 
ReadOnly="True" DataField="ID" ItemStyle-Wrap="false"/>
        
	<asp:TemplateColumn HeaderText="id_styrtal" 
SortExpression="id_styrtal">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "id_styrtal") %>'/>
          </ItemTemplate>
       
	 <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_id_styrtal" Text='<%# 
DataBinder.Eval(Container.DataItem, "id_styrtal") %>'/>
          </EditItemTemplate>
        

	</asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="org_id" SortExpression="org_id">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "org_id") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_org_id" Text='<%# 
DataBinder.Eval(Container.DataItem, "org_id") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
       

	 <asp:TemplateColumn HeaderText="period" SortExpression="period">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "period") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_period" Text='<%# 
DataBinder.Eval(Container.DataItem, "period") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        

	<asp:TemplateColumn HeaderText="utfall" SortExpression="utfall">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "utfall") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_utfall" Text='<%# 
DataBinder.Eval(Container.DataItem, "utfall") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        

	<asp:TemplateColumn HeaderText="målvärde1" 
SortExpression="målvärde1">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "målvärde1") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_målvärde1" Text='<%# 
DataBinder.Eval(Container.DataItem, "målvärde1") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
       

	 <asp:TemplateColumn HeaderText="kommentar" 
SortExpression="kommentar">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "kommentar") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_kommentar" Text='<%# 
DataBinder.Eval(Container.DataItem, "kommentar") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>


       
        
      </Columns>

    </ASP:DataGrid>

  </form>

</body>
</html>
Message #2 by "F-J Mattmann" <f-j.mattmann@e...> on Tue, 29 Oct 2002 07:20:33
Sorry I was tired, I found my mistakes (most spelling) here is the whole 
functionning code:
---
<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">

      
         Dim MyConnection As SqlConnection
         Public IDIndex As Hashtable
    
         Sub Page_Load(Src As Object, E As EventArgs)
    
             MyConnection = New SqlConnection
("server=172.30.16.24;database=test;UID=sa")
    
             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 perioddata SET ID = @ID, 
id_styrtal = @id_styrtal, period = @period, utfall = " _
                   & " @utfall, målvärde1 = @målvärde1, kommentar = 
@kommentar where ID = @ID"
    
                
             MyCommand = New SqlCommand(UpdateCmd, MyConnection)
    
  
    
            MyCommand.Parameters.Add(New SqlParameter("@ID", 
SqlDbType.int, 4))
              MyCommand.Parameters.Add(New SqlParameter("@id_styrtal", 
SqlDbType.NVarChar, 50))
                 MyCommand.Parameters.Add(New SqlParameter("@org_id", 
SqlDbType.NVarChar, 20))
          
              MyCommand.Parameters.Add(New SqlParameter("@period", 
SqlDbType.NVarChar, 18))
             MyCommand.Parameters.Add(New SqlParameter("@utfall", 
SqlDbType.float, 8))
              MyCommand.Parameters.Add(New SqlParameter("@målvärde1", 
SqlDbType.float, 8))
             MyCommand.Parameters.Add(New SqlParameter("@kommentar", 
SqlDbType.text, 16))
    
  
              MyCommand.Parameters("@ID").Value = MyDataGrid.DataKeys(CInt
(E.Item.ItemIndex))
    
              Dim Cols As String() = 
{"id_styrtal","org_id","period","utfall","målvärde1","kommentar"}
    
            
             Dim I As Integer
    
    '''''''''''''''''''''''''''''''''''''''''
       For I = 0 To 5
            Dim CurrentTextBox As TextBox
                 CurrentTextBox = E.Item.FindControl("edit_" & Cols(I))
                 Dim ColValue As String = CurrentTextBox.Text
    
    
            ''''' Kolla om användaren har fyllt i alla fält:'''''''''''''
    
                dim test as string=(colvalue)
    
                If (Ltrim(Rtrim(colvalue)))=""
                             Message.InnerHtml = "Fel: Du måste fylla i 
alla fält!"
                         Message.Style("color") = "red"
                         Return
                     End If
    
                     MyCommand.Parameters("@" & Cols(I)).Value = 
Server.HtmlEncode(ColValue)
       Next
    
    
    ''''''''''''''''''''''''''''''''''''''''''''
    
    
             MyCommand.Connection.Open()
    
             Try
                 MyCommand.ExecuteNonQuery()
                 Message.InnerHtml = "<b>Posten är uppdaterad enl. 
följande:</b><br>" & UpdateCmd
                 MyDataGrid.EditItemIndex = -1
             Catch Exp As SqlException
                 If Exp.Number = 2627
                     Message.InnerHtml = "Fel: det finns redan en post med 
denna primärnyckeln"
                 Else
                     Message.InnerHtml = "Fel: kunde inte uppdatera 
posten, kolla om allt är rätt ifyllt"
                 End If
                 Message.Style("color") = "red"
             End Try
    
             MyCommand.Connection.Close()
    
             BindGrid()
         End Sub
    
         Sub MyDataGrid_ItemDataBound(Sender As Object, E As 
DataGridItemEventArgs)
             If (e.Item.ItemType = ListItemType.EditItem) Then
                 Dim i As Integer
                 For i = 0 To e.Item.Controls.Count-1
                     Try
                         If (e.Item.Controls(i).Controls(1).GetType
().ToString() = "System.Web.UI.WebControls.TextBox") Then
                             Dim tb As TextBox
                             tb = e.Item.Controls(i).Controls(1)
                             tb.Text = Server.HtmlDecode(tb.Text)
                         End If
                     Catch
    
                     End Try
                 Next
             End If
         End Sub
    
         Sub BindGrid()
    
             Dim DS As DataSet
             Dim MyCommand As SqlDataAdapter
             MyCommand = new SqlDataAdapter("select * from periodData", 
MyConnection)
    
             DS = new DataSet()
             MyCommand.Fill(DS, "periodData")
    
             MyDataGrid.DataSource=DS.Tables("periodData").DefaultView
             MyDataGrid.DataBind()
         End Sub

</script>
<html>

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

  <form runat="server">

    <h3><font face="Verdana">Att redigera och updatera en rad (post)
</font></h3>

    <span id="Message" EnableViewmålvärde1="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="ID"
      AutoGenerateColumns="false"
      OnItemDataBound="MyDataGrid_ItemDataBound"
    >

      <Columns>
        <asp:EditCommandColumn EditText="Editera" CancelText="ångra" 
UpdateText="Uppdatera"  ItemStyle-Wrap="false"/>
        <asp:BoundColumn HeaderText="ID" SortExpression="ID" 
ReadOnly="True" DataField="ID" ItemStyle-Wrap="false"/>
        
	<asp:TemplateColumn HeaderText="id_styrtal" 
SortExpression="id_styrtal">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "id_styrtal") %>'/>
          </ItemTemplate>
       
	 <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_id_styrtal" Text='<%# 
DataBinder.Eval(Container.DataItem, "id_styrtal") %>'/>
          </EditItemTemplate>
        

	</asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="org_id" SortExpression="org_id">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "org_id") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_org_id" Text='<%# 
DataBinder.Eval(Container.DataItem, "org_id") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
       

	 <asp:TemplateColumn HeaderText="period" SortExpression="period">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "period") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_period" Text='<%# 
DataBinder.Eval(Container.DataItem, "period") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        

	<asp:TemplateColumn HeaderText="utfall" SortExpression="utfall">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "utfall") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_utfall" Text='<%# 
DataBinder.Eval(Container.DataItem, "utfall") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
        

	<asp:TemplateColumn HeaderText="målvärde1" 
SortExpression="målvärde1">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "målvärde1") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_målvärde1" Text='<%# 
DataBinder.Eval(Container.DataItem, "målvärde1") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>
       

	 <asp:TemplateColumn HeaderText="kommentar" 
SortExpression="kommentar">
          <ItemTemplate>
            <asp:Label runat="server" Text='<%# DataBinder.Eval
(Container.DataItem, "kommentar") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:TextBox runat="server" id="edit_kommentar" Text='<%# 
DataBinder.Eval(Container.DataItem, "kommentar") %>'/>
          </EditItemTemplate>
        </asp:TemplateColumn>


       
        
      </Columns>

    </ASP:DataGrid>

  </form>

</body>
</html>

  Return to Index