Avatar billede chakawoo.dk Nybegynder
14. juli 2004 - 15:26 Der er 17 kommentarer og
1 løsning

Værdi af TextBox i Datagrid (TemplateColumn) C#

Jeg har et datagrid med en TemplateColumn hvori der er en Text box.
I hver row er der en varelinie.
Det er nu meningen at brugeren skal kunne indtaste et antal i textboxen ud for de ønskede varelinier. Når det er gjort skal bruger en trykke på en OK Button uden for datagridet for at gemme.(Der skal altså ikke udføres postback før der trykkes OK)

Hvordan henter jeg værdien af textbox'ene i min TemplateColumn i CodeBehind ?

Jeg koder i C#
Avatar billede avlund Nybegynder
14. juli 2004 - 15:30 #1
Hvor sjovt, jeg havde præcis samme spørgsmål forleden. Her er svaret.

Hvis vi siger at din textbox har ID="amount" og dine DataGridCommandEventArgs hedder e:

int antal = Convert.ToInt32( ( (TextBox)e.Item.FindControl( "amount" ) ).Text );
Avatar billede avlund Nybegynder
14. juli 2004 - 15:34 #2
Sat i større perspektiv:

Datagrid:

    <asp:DataGrid id="products" runat="server" AutoGenerateColumns="false" OnItemCommand="order">
            <Columns>
                    <asp:TemplateColumn HeaderText="Amount">
                            <ItemTemplate>
                                    <asp:TextBox ID="amount" Text="1" runat="server" MaxLength="2" Width="30" />
                            </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:ButtonColumn HeaderText="Order" Text="Order" />
            </Columns>
    </asp:DataGrid>

Codebehind:

public void orderRelease( object o, DataGridCommandEventArgs e ) {

  int amount = Convert.ToInt32( ( (TextBox)e.Item.FindControl( "addAmount" ) ).Text );
}
Avatar billede avlund Nybegynder
14. juli 2004 - 15:35 #3
(hvor "amount" = "antal" og "addAmount" = "amount" i næstsidste linie, selvfølgelig... sorry)
Avatar billede chakawoo.dk Nybegynder
14. juli 2004 - 15:39 #4
Uha .. jeg skal lige ha min hjerne til at følge med.....  Jeg vil gerne ha at textbox'ene bliver gennemløbet når jeg klikker på min ok Button som er uden for datagridet skal jeg så kalde orderRelease fra min ok_click(object sender, EventArgs e)

Du skal regne med at jeg er lidt af en spasser til asp.net :-)
Avatar billede avlund Nybegynder
14. juli 2004 - 15:40 #5
Undskyld igen. Det er fordi jeg har taget min egen kode, men glemt at modificere den over det hele...

"orderRelease" skal være "order".
Avatar billede avlund Nybegynder
14. juli 2004 - 15:42 #6
Idéen er, at når du klikker på knappen (i ButtonColumn), så kalder den værdien i OnItemCommand (som er defineret i Datagrid'et). Denne værdi er navnet på event'en, som da kaldes (altså "order"). I denne gennemløber den så det Item du har valgt (altså den række du har trykket på knappen ud for) og finder så tallet og laver det om til en integer.

Du har altså ikke brug for en ok_click...
Avatar billede chakawoo.dk Nybegynder
14. juli 2004 - 15:46 #7
ja det kunne man selvfølgelig også gøre .... men jeg havde tænkt mig at man skulle udfylde de en textbox ud for hver af de varer man ønsker og derefter klikker man på en helt almindelig ok knap uden for datagridet der samler informationer fra datagrided ind og sender dem videre til indkøbskurven
Avatar billede chakawoo.dk Nybegynder
14. juli 2004 - 15:50 #8
Jeg har lavet en løsning men den er bare for statisk....

http://www.bakkeit.dk/login.aspx
e-mail : demo@bakkeit.dk
pass: demo

Vælg DEMO-0003
så får du en liste over de toner der passer i den givne printer

Det kan være det er lidt nemmere at forstå hvad det er jeg er ude efter
Avatar billede avlund Nybegynder
14. juli 2004 - 16:04 #9
Jaeh, OK. Jeg frygtede lidt at det var det du ville lave :) (da jeg også selv er i de indledende runder af at lære ASP.NET)

Hmm, jeg kan ikke helt se hvordan du skal klare den på stående fod (selv om jeg er sikker på at det nok skal kunne lade sig gøre). Med mindre det er noget i retning af:

foreach( DataGridItem in products.Items ) {
  int antal = Convert.ToInt32( ( (TextBox)e.Item.FindControl( "amount" ) ).Text );
// her gør du hvad du skal med værdien i "antal"
}
Avatar billede chakawoo.dk Nybegynder
14. juli 2004 - 16:09 #10
Hmm ... det lyder ikke helt tosset. Det må jeg lige ha testet af .. men nu er det fyraften . Du skal nok få pointene når jeg har fået prøvet det af.
Avatar billede avlund Nybegynder
14. juli 2004 - 16:14 #11
Heheh, lad os nu lige se om det virker først!

Statementet skal selvfølgelig ligge inde i ok_click-metoden...
Avatar billede thrytter Nybegynder
14. juli 2004 - 18:49 #12
Fin demo, men der bør nok tilføjes et typetjek eller andet inden konvertering til int.
Avatar billede avlund Nybegynder
14. juli 2004 - 18:50 #13
Ja, afgjort.
Avatar billede avlund Nybegynder
15. juli 2004 - 15:49 #14
Jeg er lidt online i dag, hvis du skal afprøve skidtet. For at være helt ærlig, er jeg faktisk lidt nysgerrig for at se om det virker, da jeg godt kunne finde på selv at bruge det på et senere tidspunkt.
Avatar billede chakawoo.dk Nybegynder
21. juli 2004 - 14:30 #15
Nå jeg har desværre ikke haft tid til at kigge på din løsning før nu. Chefen havde andre planer for min tid :-(
Nå men jeg har afprøvet foreach sætningen men får denne fejlmeddelelse :
'object' does not contain a definition for 'FindControl'
Avatar billede chakawoo.dk Nybegynder
22. juli 2004 - 09:57 #16
Nå nu virker det squ. Løsningen var at fjerne Item fra ((TextBox)e.Item.FindControl("amount" ) ).Text );

Altså
foreach(DataGridItem dgi in tonerDG.Items ) {
int antal = Convert.ToInt32(((TextBox)dgi.FindControl("antalDGTB")).Text);
}
100 bananer på vej til avlund.....  Tak for hjælpen
Avatar billede chakawoo.dk Nybegynder
22. juli 2004 - 09:59 #17
Forøvrigt fandt jeg denne artikkel der omhandler emnet på en overskuelig måde

http://www.c-sharpcorner.com/Code/2003/Jan/AccessDataGridVal.asp
Avatar billede avlund Nybegynder
23. juli 2004 - 20:27 #18
Ja, selvfølgelig er det ikke på Item du bruger FindControl... my bad.

Tak for points, glad for at du fik det til at spille. I øvrigt fedt med den artikel til ekstra info!!
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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