Avatar billede karl-koder Nybegynder
26. januar 2008 - 11:36 Der er 18 kommentarer og
1 løsning

Finde sidste række i GridView

Hejsa,

Jeg sidder og prøver på at finde sidste række i et gridview men det lykkes ikke rigtigt for mig. Jeg har 2 kolonner i mit GridView der indeholder en ImageButton, hvor jeg ikke skal vise den øverste kanp i den ene kolonne og den nederste knap i den anden kolonne, men da jeg ikke lige kan hitte ud af at finde den sidste række volder det mig lidt problemer. Her kommer lidt kode.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ImageButton btnUp = (ImageButton)e.Row.FindControl("btnUp");
        ImageButton btnDown = (ImageButton)e.Row.FindControl("btnDown");

        if (!(e.Row.RowIndex > 0))
        {
            btnUp.Visible = false;
        }
       
        // HER MANGLER JEG SÅ NOGET
        if ()
        {
            btnDown.Visible = false;
        }
    }
}

Den med at finde den første række er ikke noget problem.
Avatar billede nielle Nybegynder
26. januar 2008 - 11:47 #1
Sådan?

            // HER MANGLER JEG SÅ NOGET
            if (e.Row.RowIndex == GridView1.Rows.Count-1)
            {
                btnDown.Visible = false;
            }
Avatar billede nielle Nybegynder
26. januar 2008 - 11:49 #2
... ville i øvrigt nok skrive den første if som:

            if (e.Row.RowIndex == 0)
            {
                btnUp.Visible = false;
            }
Avatar billede karl-koder Nybegynder
26. januar 2008 - 12:33 #3
// HER MANGLER JEG SÅ NOGET
            if (e.Row.RowIndex == GridView1.Rows.Count-1)
            {
                btnDown.Visible = false;
            }

virker ikke alle button's vises

if (e.Row.RowIndex == 0)
            {
                btnUp.Visible = false;
            }

hvad skulle forskellen være ? (den virker iøvrigt)
Avatar billede nielle Nybegynder
26. januar 2008 - 12:40 #4
Forskellen på:

if (e.Row.RowIndex == 0)
            {
                btnUp.Visible = false;
            }


og:

        if (!(e.Row.RowIndex > 0))
        {
            btnUp.Visible = false;
        }

er såmæn kun at den første er mere direkte mht. hvad der testets.
Avatar billede nielle Nybegynder
26. januar 2008 - 12:41 #5
// HER MANGLER JEG SÅ NOGET
            if (e.Row.RowIndex == GridView1.Rows.Count-1)
            {
                btnDown.Visible = false;
            }

burde virke...

Men du kan jo forsøge med:

// HER MANGLER JEG SÅ NOGET
            if (e.Row.RowIndex == GridView1.Rows.Count - 2)
            {
                btnDown.Visible = false;
            }

og se om det gør en forskel.
Avatar billede karl-koder Nybegynder
26. januar 2008 - 12:55 #6
Jeg har 4 records i min db bare til test og den øverste button i den ene kolonne vises helt efter planen.

Men alle 4 button's i den anden kolonne vises uanset om det er med -1 eller -2 og det virker sq lidt underligt.
Avatar billede nielle Nybegynder
26. januar 2008 - 12:59 #7
Hmmm, måske er antallet af Rows ikke fastlagt før bagefter RowDataBound er kaldt...

Prøv lige med denne:

// HER MANGLER JEG SÅ NOGET
            if (e.Row.RowIndex == 4-1)  // Index for 4. række
            {
                btnDown.Visible = false;
            }
Avatar billede karl-koder Nybegynder
26. januar 2008 - 13:04 #8
Se det var en anden snak så forsvinder den som forventet, ergo må count ikke være fastlagt.

Hmmm... hvad gør vi så ?
Avatar billede nielle Nybegynder
26. januar 2008 - 14:14 #9
Taj, så kan du vist ikke gøre det fra RowDataBound - men måske noget i denne stil kan gøre det:

    protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.Rows[GridView1.Rows.Count - 1].FindControl("btnDown").Visible = false;
    }
Avatar billede karl-koder Nybegynder
26. januar 2008 - 14:34 #10
Ja det virker også, men det ser jo ikke så "pænt" ud.

Men Jeg er lige kommet på den idé at jeg kunne trække en caount på generics.list så tror jeg faktist jeg kan fange antallet der.

Men det bliver først i aften for jeg skal ud af døren nu skal nok lige melde tilbage senere med resultatet.
Avatar billede karl-koder Nybegynder
26. januar 2008 - 22:58 #11
Så fik jeg testet med min ide og det virker, men kom gerne med evt. kommentar ;o)

Sites.Site objSite = new Sites.Site();
int count = objSite.GetAllSites().Count;
if (e.Row.RowIndex == count - 1)
{
    btnDown.Visible = false;
}
Avatar billede nielle Nybegynder
27. januar 2008 - 13:40 #12
Nu er jeg jo så ikke klar over hvordan din Sites.Site - constructor virker. Men hvis den er nede i databasem og læse, så er det der noget som belaster. En initialisering pr. række i dit gridview.

Dertil kommer den oprindelige initialisering hvor at du kalder den for første gang.

Hvad med soimelthen at gemme returværdien fra det første kald i en variabel som ligger "udenfor" RowDataBound og så bare genbruges. Den kunne jo f.eks. initialiseres i PageLoad.
Avatar billede nielle Nybegynder
04. februar 2008 - 17:09 #13
Er du der stadig?
Avatar billede karl-koder Nybegynder
04. februar 2008 - 20:33 #14
Sorry, har været lidt fraværende den senere tid.

Min GetAllSites() metode retunere en generic liste der smides i cache så den dykker kun i databasen første gang, men jeg kan som du skriver godt trække den uden for RowDataBound
Avatar billede nielle Nybegynder
05. februar 2008 - 19:00 #15
Har du fået løst dit problem, eller er der stadig mere?
Avatar billede karl-koder Nybegynder
05. februar 2008 - 19:20 #16
Ja det har jeg smid bare et svar og tak for hjælpen
Avatar billede nielle Nybegynder
05. februar 2008 - 22:05 #17
Svar :^)
Avatar billede nielle Nybegynder
11. februar 2008 - 18:31 #18
Så mangler du bare at acceptere mit svar :^)
Avatar billede karl-koder Nybegynder
11. februar 2008 - 19:57 #19
ups ;o)
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