Avatar billede Kim Neesgaard Seniormester
11. august 2008 - 10:24 Der er 10 kommentarer og
1 løsning

Indføre ekstra data under optegning af et GridView

Jeg har et GridView, der lister en række data. Under optegningen af dette GridView vil jeg gerne for hver linie aflæse værdien af en kolonne og baseret på denne værdi tilføje en beregnet værdi i en anden kolonne. Jeg har engang haft koden til det, men den kan jeg ikke finde igen - hvordan er det, at man gør?
Avatar billede c-sharp Nybegynder
11. august 2008 - 12:29 #1
Du kan bruge event'en "OnRowDataBound" på dit GridView, ved hjælp af den kan du så i din codebehind finde dine kontroller og aflæse og opdatere dem.
Avatar billede Kim Neesgaard Seniormester
11. august 2008 - 14:35 #2
Jeg har en RowDataBound (altså uden 'On') - er det den?

Hvis jeg har en kolonne i griddet, der hedder 'Mængde' - hvordan aflæser jeg denne?

Mine eksisterende kolonner er defineret med og kommer fra en tabel:

<Columns>
<asp:BoundField DataField="Amount" HeaderText="Mængde" ReadOnly="True" />

Hvordan tilføjer jeg ekstra felter, der ikke kommer fra en tabel, men er beregnet ud fra fx. indholdet af Mængde? Og hvordan tildeles de en værdi i griddet?
Avatar billede simsen Mester
12. august 2008 - 14:35 #3
Det jeg har gjort er følgende:

                //Ordrerlinie
                DataColumn col = new DataColumn("RaekkeBeloeb");
                col.DataType = typeof(System.Decimal);

                col.Expression = "Antal*PrisExMoms";

                //add the colums
                GetInvoice.Columns.Add(col);


                grdInvoice.DataSource = GetInvoice.DefaultView;
                grdInvoice.DataBind();

på aspx siden, har jeg så lavet et BoundField med DataField="RaekkeBeloeb"
Avatar billede Kim Neesgaard Seniormester
12. august 2008 - 17:51 #4
simsen -> Jeg har prøvet koden, men ved GetInvoice får jeg: 'Name GetInvoice is not Declared'?
Avatar billede simsen Mester
13. august 2008 - 09:48 #5
Det er den datatable jeg bruger, til at smide tingene ind i gridviewet med......

Altså det jeg gør, henter data fra databasen, som jeg fører over i en DataTable....

Så det er jo alt efter, hvordan du henter data over i dit gridview - om du bruger DataTable eller how?

Men ellers instantierer man en DataTable på følgende måde:

DataTable navnetPåDataTable = null; //navnetPåDataTable er så her lig med GetInvoice
Avatar billede Kim Neesgaard Seniormester
14. august 2008 - 17:00 #6
Fint - nu virker det! I dette eksempel består den ekstra kolonne af beregninger mellem to andre felter - kunne indholdet af den ekstra kolonne også være et SQL opslag med basis i en af de eksisterende kolonner?
Avatar billede simsen Mester
15. august 2008 - 13:11 #7
Jeg forstår ikke lige hvad du vil? Altså du vil tilføje en ekstra kolonne med data fra en anden tabel eller hvad?

Hvis sådan..... Du kan såvidt jeg ved tilføje alt hva du vil have - i mit tilfælde var det så bare at tilføje en kolonne hvor jeg skulle gange to felter med hinanden......
Avatar billede Kim Neesgaard Seniormester
15. august 2008 - 15:41 #8
Ja - det kunne være antal * et funktionskald, der kunne slå op i en anden tabel med antal som kriterie.

Jeg forsøgte mig med:

col.Expression = "Antal*Funk(Antal)";

men det gik ikke. Ved du, hvordan man kan gøre det?
Avatar billede Kim Neesgaard Seniormester
18. august 2008 - 16:13 #9
Jeg tror, at dette kan gøres ved først at tilføje en kolonne til DataTable og så køre den igennem med en løkke, der kunne være:

Dim n As Integer
For n = 0 To dt.Rows.Count - 1
  dt.Rows(n)(1) = Funk(dt.Rows(n)(0))
Next

hvor tabelopslaget i en anden tabel kan foregå i Funk.

Herefter kan man så koble den på GridViewet.
Avatar billede Kim Neesgaard Seniormester
08. september 2008 - 15:34 #10
Nu har jeg tjekket det efter i praksis og det virker fint. Blot skal man huske at specificere det nye felt som:

<asp:BoundField DataField="Ny" HeaderText="Ny" ><ItemStyle Width="150px" /></asp:BoundField>

AutoGenerateColumns kan ikke 'se' det nye felt.
Avatar billede Kim Neesgaard Seniormester
15. september 2008 - 09:59 #11
Og Funk er fx.:

Function funk(ByVal x As Integer) As Integer
        Return (x * 2)
End Function
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