Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 21:30 Der er 18 kommentarer og
1 løsning

gridView - UPDATE - DropDownList - Must declare the scalar vari..

Hej og på forhånd tak.

Jeg har nu søgt i overalt efter svar på mit problem og jeg kan simpelthen ikke lure den.

Jeg indrømmer gerne at asp.net er nyt for mig, men det virker ikke overvældende svrært, men der er dog nogle ting jeg bare ikke kan forstå. Så på forhånd tak fordi du forstår at min viden er hullet, oag at jeg muligvis spørger om noget ganske banalt.

SITUATIONEN:
Jeg skal opdatere et felt [7pstat] i en række i et gridView.
Helst med en dropDownList som kilde til den nye værdi.

setup: Surftown, DB: MS SQL server, platform: .net 2.0


PROBLEMET:
Must declare the scalar variable "@syvPstatus".

sagt med andre ord. Jeg kan ikke binde min update sammen med værdien fra dropdownlisten.

Jeg har prøvet forskellige mere eller mindre fantasifulde løsninger, herunder forsøg med updateparameters (forstår dem ikke 100%)

SYMPTOMER:
jeg kan vælge en værdi fra min dropdown, men får en fejl når jeg updater.

KODEN:
<asp:GridView runat="server" id="GridView1" AutoGenerateColumns="False" DataSourceID="TEstDB" DataKeyNames="ordrenr" CellPadding="4" ForeColor="#333333">
    <FooterStyle BackColor="#5D7B9D" ForeColor="White" Font-Bold="True" />
    <Columns>
        <asp:commandfield ShowEditButton="True"></asp:commandfield>
        <asp:boundfield ReadOnly="True" DataField="ordrenr" SortExpression="ordrenr" HeaderText="Ordre nr."></asp:boundfield>
        <asp:templatefield HeaderText="Status">
            <ItemTemplate>
                <asp:Label Text='<%# Eval("[7pstat]") %>' runat="server" id="syvpstat" />
            </ItemTemplate>
            <EditItemTemplate>
                <span class="datatext">Set 7P status</span><br />
                <asp:DropDownList  runat="server" id="syvPstatus" DataValueField="syvPstatus" DataTextField="syvPstatus">
                    <asp:ListItem Text="800 - ikke sat" Value="800"></asp:ListItem>
                    <asp:ListItem Text="801 - testformål" Value="801"></asp:ListItem>
                </asp:DropDownList>
            </EditItemTemplate>
        </asp:templatefield>
    </Columns>
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <EditRowStyle BackColor="#EEEEDD" />
    <SelectedRowStyle BackColor="#E2DED6" ForeColor="#333333" Font-Bold="True" />
</asp:GridView>   

<asp:SqlDataSource
    runat="server"
    ID="TEstDB"
    ConnectionString="<%$ ConnectionStrings:publish_shopConnectionString %>"
    SelectCommand="SELECT DISTINCT * FROM ordre WHERE [7pstat]='800' OR [7pstat]='801' ORDER BY [ordrenr] DESC"
    UpdateCommand="UPDATE [ordre] SET [7pstat]=@syvPstatus WHERE [ordrenr] = @ordrenr">
    <UpdateParameters>   
    </UpdateParameters>
</asp:SqlDataSource>

--------------------
koden er forsøgt reduceret til det absolut minimumme.

Alle forslag er meget velkomne, jeg er ved at blive meget træt af dette problem...

Venlig hilsen
Nicolas
Avatar billede dr_chaos Nybegynder
07. oktober 2007 - 21:49 #1
prøv med
<asp:DropDownList  runat="server" id="syvPstatus" DataValueField="syvPstatus" DataTextField="syvPstatus" selectedvalue='<%#Bind("syvPstatus")%>'>
                    <asp:ListItem Text="800 - ikke sat" Value="800"></asp:ListItem>
                    <asp:ListItem Text="801 - testformål" Value="801"></asp:ListItem>
                </asp:DropDownList>
Avatar billede neoman Novice
07. oktober 2007 - 21:51 #2
prøv dette:   

<asp:DropDownList  runat="server" id="syvPstatus" SelectedValue='<%#Bind("syvPstatus") %>'>
                    <asp:ListItem Text="800 - ikke sat" Value="800"></asp:ListItem>
                    <asp:ListItem Text="801 - testformål" Value="801"></asp:ListItem>
        </asp:DropDownList>
Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 22:34 #3
tak for jeres bud, emn det virker ikke...

FEJL: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'syvPstatus'


Jeg tror at SelectedValue umidlbart bruges den anden vej rundt??? altså til at binde en datakilde til listen??

/Nicolas
Avatar billede neoman Novice
07. oktober 2007 - 22:47 #4
Den virker both ways - men det interessante er din fejbesked som antyder at du har noget sjovt i din code-behind. Vis lige koden
Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 22:50 #5
lidt mere info...

Et nyt forsøg inspireet af de foregående bud:

KODE:

UpdateCommand="UPDATE [ordre] SET [7pstat]=@syvPstatusParam WHERE [ordrenr] = @ordrenr">
<UpdateParameters>
    <asp:ControlParameter Name="syvPstatusParam" ControlId="syvPstatus" PropertyName="SelectedValue"/>
</UpdateParameters>

(Læg mærke til at UPDATE SQL er ændret her til at bruge værdien fra @syvPstatusParam)
hvilket jeg håber at jeg har forstået rigtigt.

FELJ:
Could not find control 'syvPstatus' in ControlParameter 'syvPstatusParam'
---
hvilket måske er symptomatisk... jeg kan ikke forstå fejlen. burde den ikke kunne finde det når der findes en control med id="syvPstatus":

<asp:DropDownList  runat="server" id="syvPstatus" DataValueField="syvPstatus" DataTextField="syvPstatus">

/Nicolas
Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 22:52 #6
neoman: du har hele koden oven for.

Jeg har endnu ikke helt fattet det med at adskille koden fra aspx filen.

det eneste der ikke er med er noget html værk:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="VB" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ikke Afsendte</title>
</head>
/Nicolas
Avatar billede dr_chaos Nybegynder
07. oktober 2007 - 22:56 #7
SelectedValue sammen med bind betyder at du skal binde det til en værdi fra din datakilde som ligger i en kolonne eller andet med navnet syvPstatus og din parameter skal også have samme navn når du opdaterer.

Ellers skal du hente værdien i codebehind og binde den til parameter.
Avatar billede neoman Novice
07. oktober 2007 - 22:56 #8
Nårh ja - din Update command har jo slet ingen parametre defineret - har du strikket alt det her sammen i hånden ? Det er jo nok der der er gået galt:)
Avatar billede neoman Novice
07. oktober 2007 - 22:59 #9
glem nu datavaluefield og datatextfield - eftersom din DDL IKKE er bundet til at hente værdier fra db'en så er disse irrelevante..
<asp:DropDownList  runat="server" id="syvPstatus" DataValueField="syvPstatus" DataTextField="syvPstatus">

din ddl skal se ud som jeg skrev før
Avatar billede dr_chaos Nybegynder
07. oktober 2007 - 23:00 #10
Det behøver en update command ikke hvis den er bundet op rigtigt.
Avatar billede dr_chaos Nybegynder
07. oktober 2007 - 23:02 #11
Hvis din ddl ikke er bundet fra databasen og den ligger i et gridview skal du hente den valgte værdi ud i codebehind.
Brug evt on updating eventet på gridviewet eller på sql datasource.
<asp:ControlParameter Name="syvPstatusParam" ControlId="syvPstatus" PropertyName="SelectedValue"/>
Kan du kun bruge hvis din kontrol er unik i alle tilfælde og det vil den ikke være i et gridview. Men vil være i et formview f.eks.
Avatar billede neoman Novice
07. oktober 2007 - 23:05 #12
jeg overlader feltet til dr_chaos - for mange kokke fordærver maden:)
Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 23:07 #13
Altså.

Ja, jeg Strikker en del. (oftest med stor succes)

Nå, men ok. Det viser sig jo at i begge havde ret, og jeg ikke fattede hvad det gik ud på.

Ved at fjerne mine update params og bruge

SelectedValue='<%#Bind("7Pstat")%>'>

(hvor den nu binder til feltet i min DB som hedder [7Pstat])

Ja, så virker det jo mange tak.

I burde jo dele point da i jo nærmest var lige hurtige med løsningen  og begge har bidraget til min større forståelse (eller forvirring på et højere plan).

Mange tak

/Nicolas
Avatar billede dr_chaos Nybegynder
07. oktober 2007 - 23:09 #14
Jamen så smider vi bare et svar :)
Tidligere kunne jeg også regne med at få nogle af pointsne af neoman når han stillede spm.
Nu er han bare blevet meget bedre og jeg er mindre aktiv :)
Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 23:09 #15
som sagt i har begge to bidraget positivt med indspark, ikke fordærvning ;)

Jeg magter lige akkuart at følge to parallelle løsningsmuligheder.

men det virker nu, så nu skal jeg bare have givet jer point. hvordan deler man det mellem jer?

/Nicvolas
Avatar billede dr_chaos Nybegynder
07. oktober 2007 - 23:15 #16
Vi skal begge lægge et svar. Og så holder du ctrl nede og markerer os begge og trykker accepter.
Neoman mangler at lægge et svar.
Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 23:16 #17
Det er helt hyggligt at være tilbage på eksperten. Det er sq nogle år siden jeg var aktiv, jeg tror jeg var på første gang i '97 da jeg startede på datalogi... Det var dengang, og tænk at det skulle være her man endnu en gang fandt sin løsning på hvad der - endnu en gang - var et banalt problem... (Snøft, med nostalgiske toner i baggrunden og en ubehagelig fornemmelse af at være ved at blive gammel.)
Avatar billede nicolas8586 Nybegynder
07. oktober 2007 - 23:21 #18
nå, neoman du må jo lige sige til hvis du vil have point, så laver jeg et nyt indlæg til dig...
tak for i aften
Avatar billede dr_chaos Nybegynder
07. oktober 2007 - 23:30 #19
Hehe.
Jeg startede 2001.
nicolas8586 du må give mere end 200 points for et spm.
Derfor laver jeg et med 100 points som neoman kan smide et svar i:
http://www.eksperten.dk/spm/799957
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester