webForumDet fria alternativet

Object reference not set to an instance of an object.

.NETur .NET

16 svar · 687 visningar · startad av trexter

Medlem sedan mars 20021 889 inlägg
Frågan#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! :)

Medlem sedan aug. 20039 342 inlägg
#2

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.

Medlem sedan mars 20021 889 inlägg
#3
            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. :(

Medlem sedan aug. 20039 342 inlägg
#4

Vad är btnFactory fär något då?

Medlem sedan mars 20021 889 inlägg
#5

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;
Medlem sedan mars 20021 889 inlägg
#6

Någon som har tid att döda? ;)

Medlem sedan mars 20021 889 inlägg
#7

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.

Medlem sedan sep. 20026 425 inlägg
#8

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.

Medlem sedan mars 20021 889 inlägg
#9

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>
Medlem sedan mars 20021 889 inlägg
#10

Ingen? :)

Medlem sedan jan. 20012 204 inlägg
#11

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();
Medlem sedan mars 20021 889 inlägg
#12

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

Medlem sedan dec. 2005664 inlägg
#13

Hur ser

btnFactory.CommandArgument

ut då?

Medlem sedan mars 20021 889 inlägg
#14

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.

Medlem sedan dec. 2005664 inlägg
#15

Ja men vad är innehållet, låter som den är tom.

Medlem sedan mars 20021 889 inlägg
#16

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

Medlem sedan mars 20021 889 inlägg
#17

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

:)

138 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)