T trexter Medlem sedan mars 2002 1 889 inlägg Frågan 14 mars 2006 11:53 #1 Den här raden
myCommand.Parameters.Add("@ATTArende", SqlDbType.Int, 4).Value = btnFactory.CommandArgument;
ger mig felmeddelandet.
Object reference not set to an instance of an object.
Koden ligger i code-behind-filen. I den andra har jag:
<ASP:TemplateColumn HeaderText="" SortExpression="aa">
<ItemTemplate>
<asp:LinkButton ID="btnFactory" OnClick="Factory" runat=server CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ArendeID") %>'>Till fabrikslista</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
i min DataGrid.
Tack på förhand! :)
Jag är inte helt inne på ASP, men jag får för mig att myCommand.Parameters.Add("@ATTArende", SqlDbType.Int, 4) inte returnerar något värde, så när du sen kör Value = ... så finns det inget som kan ta emot Value-parametern.
T trexter Medlem sedan mars 2002 1 889 inlägg String insertCmd = "insert into ArendenTillTillverkare (ATTArende, ATTTillverkare, ATTSkickad, ATTAnvID) values (@ATTArende, @ATTTillverkare, @ATTSkickad, @ATTAnvID)";
SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@ATTAnvID", SqlDbType.Int, 10));
myCommand.Parameters["@ATTAnvID"].Value = UserIdentityName[1];
myCommand.Parameters.Add(new SqlParameter("@ATTTillverkare", SqlDbType.Int, 4));
myCommand.Parameters["@ATTTillverkare"].Value = 4;
[b] myCommand.Parameters.Add(new SqlParameter("@ATTArende", SqlDbType.Int, 4));
myCommand.Parameters["@ATTArende"].Value = btnFactory.CommandArgument;[/b]
myCommand.Parameters.Add(new SqlParameter("@ATTSkickad", SqlDbType.Bit, 4));
myCommand.Parameters["@ATTSkickad"].Value = true;
men fortfarande samma fel. :(
Vad är btnFactory fär något då?
T trexter Medlem sedan mars 2002 1 889 inlägg Den kan du se i min första post. :)
Jag har deklarerat den i code-behind-filen med:
public System.Web.UI.WebControls.LinkButton btnFactory;
T trexter Medlem sedan mars 2002 1 889 inlägg Någon som har tid att döda? ;)
T trexter Medlem sedan mars 2002 1 889 inlägg Funktionen där insert:en ska göras börjar med
protected void Factory(Object sender, EventArgs E)
I annan kod har jag sett i stil med "e.CommandArgument" men får inte till det här.
Troligtvis innehåller btnFactory.CommandArgument ingen info och det är det som gör att du får felmeddelandet när du sen försöker lägga till en parameter till myCommand.
T trexter Medlem sedan mars 2002 1 889 inlägg Det är lite underligt för på ett annat ställe presenteras värdena som även borde finnas i commandargument. :)
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="700"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
DataKeyField="ArendeID"
AutoGenerateColumns="false">
<Columns>
<ASP:BoundColumn HeaderText="ID" DataField="ArendeID" ReadOnly=true />
<ASP:TemplateColumn HeaderText="Ärende" SortExpression="ArendeID">
<ItemTemplate>
[b]<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ArendeID") %>'/>[/b]
</ItemTemplate>
</asp:TemplateColumn>
<ASP:TemplateColumn HeaderText="Serienummer" SortExpression="ArendeSerieNr">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ArendeSerieNr") %>' />
</ItemTemplate>
</asp:TemplateColumn>
<ASP:TemplateColumn HeaderText="Inkommen" SortExpression="ArendeInkommenDatum">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ArendeInkommenDatum") %>'/>
</ItemTemplate>
</asp:TemplateColumn>
<ASP:TemplateColumn HeaderText="" SortExpression="aa">
<ItemTemplate>
[b]<asp:LinkButton ID="btnFactory" OnClick="Factory" runat=server CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ArendeID") %>'>Till fabrikslista</asp:LinkButton>[/b]
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</ASP:DataGrid>
P P Medlem sedan jan. 2001 2 204 inlägg Låter som du glömt new någonstans? Kanske ute och cyklar men...
public System.Web.UI.WebControls.LinkButton btnFactory = new System.Web.UI.WebControls.LinkButton();
T trexter Medlem sedan mars 2002 1 889 inlägg Tack. Jag tror det fungerar. :) Men:
String insertCmd = "insert into ArendenTillTillverkare (ATTArende, ATTTillverkare, ATTSkickad, ATTAnvID) values (@ATTArende, @ATTTillverkare, @ATTSkickad, @ATTAnvID)";
SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@ATTAnvID", SqlDbType.Int, 10));
myCommand.Parameters["@ATTAnvID"].Value = UserIdentityName[1];
myCommand.Parameters.Add(new SqlParameter("@ATTTillverkare", SqlDbType.Int, 4));
myCommand.Parameters["@ATTTillverkare"].Value = 4;
[b]myCommand.Parameters.Add(new SqlParameter("@ATTArende", SqlDbType.Int, 4));
myCommand.Parameters["@ATTArende"].Value = Int32.Parse(btnFactory.CommandArgument);[/b]
myCommand.Parameters.Add(new SqlParameter("@ATTSkickad", SqlDbType.Bit, 4));
myCommand.Parameters["@ATTSkickad"].Value = true;
ger
System.FormatException: Input string was not in a correct format.
Ändå är 'ATTArende' av typen int i databasen.
:q
cok Medlem sedan dec. 2005 664 inlägg Hur ser
btnFactory.CommandArgument
ut då?
T trexter Medlem sedan mars 2002 1 889 inlägg
cok skrev:
Hur ser
btnFactory.CommandArgument
ut då?
Den "propertyn" är ju en sträng vad jag vet, det är ju därför jag försöker parsa om den till en int.
cok Medlem sedan dec. 2005 664 inlägg Ja men vad är innehållet, låter som den är tom.
T trexter Medlem sedan mars 2002 1 889 inlägg Hej igen, jo strängen btnFactory.CommandArgument är tom. Hur kan detta vara?
I datagriden har jag ju
<Columns>
<ASP:BoundColumn HeaderText="ID" DataField="ArendeID" ReadOnly=true />
<ASP:TemplateColumn HeaderText="Ärende" SortExpression="ArendeID">
[b]<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ArendeID") %>'/>
</ItemTemplate>[/b]
</asp:TemplateColumn>
<ASP:TemplateColumn HeaderText="Serienummer" SortExpression="ArendeSerieNr">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ArendeSerieNr") %>' />
</ItemTemplate>
</asp:TemplateColumn>
<ASP:TemplateColumn HeaderText="Inkommen" SortExpression="ArendeInkommenDatum">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ArendeInkommenDatum") %>'/>
</ItemTemplate>
</asp:TemplateColumn>
<ASP:TemplateColumn HeaderText="" SortExpression="aa">
<ItemTemplate>
[b]<asp:LinkButton ID="btnFactory" OnClick="Factory" runat=server CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ArendeID") %>'>Till fabrikslista</asp:LinkButton>[/b]
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ArendeID") %>'/>
skrivs ut. Då tycker man att värdet i ItemTemplate:n i slutet också borde komma med? :q
edit. Även om jag skriver
<asp:LinkButton ID="btnFactory" OnClick="Factory" runat=server CommandArgument='hej'>Till fabrikslista</asp:LinkButton>
skickas inget värde med (eller inget värde kan hämtas).
T trexter Medlem sedan mars 2002 1 889 inlägg Löste det.
1. Bytade från OnClick till OnCommand
2. Bytade på parametrarna i funktionen från EventArgs till CommandEventArgs
3. Plockade fram värdet genom E.CommandArgument
:)