|
 |
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>
|
|
 |