Avatar billede naza Nybegynder
18. december 2004 - 18:55 Der er 2 kommentarer og
1 løsning

redigering Datagrid template

Hej

Jeg har lavet et datagrid hvor jeg bruger template for de enkelte kolonner.

Her har jeg bla. valgt at lave en template for select og her kunne jeg godt tænke mig at der skal være en knap til at selecte med på nogle af rækkerne, men ikke alle.
De enkelte poster i databasen har en kolonne der hedder TypeID - Hvis denne typeID er 1 eller 4 så skal der ikke være nogen select knap (idet den kommando der efterfølgende kører ved SelectedIndexChanged vil melde fejl på poster med typeid=1 eller 4).

Er der nogen der kan hjælpe med hvordan jeg kan differentierer i en kolonnetemplate i et datagrid?

Mvh. Jannik
Avatar billede snepnet Nybegynder
19. december 2004 - 12:43 #1
hej Jannik :o)

der er lidt forskellige muligheder, men det nemmeste for dig vil nok være at du abbonerer på datagriddet ItemDataBound-event, og bruger en kode i stil med nedenstående :

private void grid_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    // hvis det er almindelige datarækker
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // findes typeid'et udfra datakilden
        int typeId = (int)((DataRowView)e.Item.DataItem)["TypeId"];
        // hvis det er type 1 eller 4
        if(typeId==1 || typeId==4)
        {
            // sørges der for, at knappen ikke vises
            ((LinkButton)e.Item.Cells[0].Controls[0]).Visible= false;
        }
    }
}

ovenståden forudsætter :
1) At dit typeid findes i datakilden i kolonnen TypeId, og at det er en integertype.
2) At din selectknap er en linkbutton der vises i datagriddet første kolonne.

du spørger bare hvis der er noget du er i tvivl om, eller hvis du skal have en hånd med at modificere det til den måde du har sat dit grid op på.

mvh
Avatar billede naza Nybegynder
19. december 2004 - 14:51 #2
Hej Snepnet

Tak for dit svar - Det er lige det jeg skal bruge. (Har dog lige lavet det om til VB).

Kan ikke give dig point, er det fordi du kun har kommenteret? Du kan lige poste et svar, så skal jeg nok give dig point :-)

Et lille tip til den kode du har sendt er (Hvis der er andre der også har brug for dette)

If e.Item.ItemType <> ListItemType.Header And e.Item.ItemType <> ListItemType.Footer Then

istedet for den første if-sætning for ellers vil knapperne komme frem nogle steder hvor typeid = 1 eller 4 (faktisk hver gang at den efterfølgende poster har typeid=1 eller 4 hvor den forgående også havde det).
Det skyldes at der er mange forskellige ItemTypes og med denne if-sætning kigger vi på dem alle på nær header og footer.

Mvh. Jannik
Avatar billede snepnet Nybegynder
19. december 2004 - 16:14 #3
hej Jannik - fint at du kunne bruge det :o)

og jeps... det er rigtigt, at hvis du bruger den første jeg skrev, vil logikken ikke blive kørt ved SelectedItem eller EditItem - og du vil så få knapperne ind (uanset typeid), hvis du benytter dig af den slags i dit grid.

mvh
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