Avatar billede cuac Nybegynder
23. januar 2004 - 15:17 Der er 8 kommentarer og
1 løsning

Adresse på linkbutton i datagrid

Jeg har et datagrid med en kolonne hvor jeg har to linkbutton i samme kolonne se
HTML:
<Columns>
<ItemTemplate>
                            <asp:LinkButton CommandName="Edit" Text="Ret" runat="server" />
                            <asp:LinkButton CommandName="Delete" Text="Delete" runat="server" />
                        </ItemTemplate>
</Columns>


Mit problem er at finde adressen på deleteButton, idet nedenstående syntaks giver mig editButton.

Dim deleteButton as LinkButton = e.Item.Cells(5).Controls(1)

Jeg har prøvet med Controls(2), men det giver fejl
Avatar billede thor.ostergaard Nybegynder
23. januar 2004 - 15:25 #1
prøv at slå trace til - det plejer man at blive klogere af
Avatar billede jettes Nybegynder
23. januar 2004 - 16:13 #3
Giv hver af dine linkbuttons et id i HTML'en (her: lnkDelete), og så kan du i itemDatabound eller itemCreated finde dem ved hjælp af:

With CType(e.Item.FindControl("lnkDelete"), LinkButton)
    .CommandArgument = e.Item.Cells(1).Text
End With

Her sættes commandargument til indholdet af den 2. celle.

Pas på at du ikke har fat i header eller footer rækkerne ved hjælp af noget i retningen af ...

If e.Item.ItemType = ListItemType.Header Then
  'gør noget
else
  'Find linkbuttons
end if
Avatar billede cuac Nybegynder
26. januar 2004 - 14:55 #4
Jeg har slået trace til, men bliver ikke meget klogere. Jeg har mine 2 controls i celle 5, for jeg får som nævnt udført det jeg ønsker, men ikke når jeg trykker på Delete, men i stedet når jeg trykker på Edit. Jeg forstår simpelthen ikke at jeg ikke kan adresse den anden control i cellen via

Dim deletebutton as LinkButton = e.Item.Cells(5).Controls(1)

          deletebutton.Attributes("onclick")= ............

er der andre gode forslag?
Avatar billede thrytter Nybegynder
28. januar 2004 - 08:41 #5
Forslag er der mange af, men har lidt svært ved at forstå dit problem?

Hvis du vil sætte "onclick" på din sletteknap kan du tilføje følgende eventhandler:

Public Sub dgCuac_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgCuac.ItemDataBoundSelect 
    Case e.Item.ItemType
      Case ListItemType.Item, ListItemType.AlternatingItem
        CType(e.Item.FindControl("lbtnDelete"), LinkButton).Attributes.Add("onclick", "java script:return noticeDelete();")
    End Select
End Sub

og i din .aspx fil tilføje følgende javascript funktion:
function noticeDelete()
{
  return (confirm("Vil du slette den valgte post?"))
}               

Vil du opfange tryk på Deleteknappen kan du tilføje følgende eventhandler:

Private Sub dgCuac_ItemCommand(ByVal source As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgCuac.ItemCommand
  Select Case e.ItemCommand
    Case "Delete"
      CType(e.Item.FindControl("lbtnDelete"),LinkButton).Text = "Got me.."
    Case "Edit"
      ' Gør et eller andet
  End Select
End Sub

Delete, Edit og Update kommandoer kan også "fanges" i deres egne eventhandlere.

Som jettes skriver er det altså en ret god ide, hvis alle dine kontroller tildeles et Id.
Avatar billede cuac Nybegynder
28. januar 2004 - 09:54 #6
thrytter jeg kan godt se ideen med dit forslag, men er ikke så stiv i aspx, så jeg har ikke fået det til at virke.

Min sub ser således ud, og virker godt nok, problemet er bare at den fanger den Control der står først i kolonnen, jeg har 2 Controller i samme kolonne, i det her tilfælde Edit. se HTML:

asp:TemplateColumn>
                        <ItemTemplate>
                            <asp:LinkButton id="lnkEdit" CommandName="Edit" Text="Edit" runat="server" />
                            <asp:LinkButton id="lnkDelete" CommandName="Delete" Text="Delete" runat="server" />
                        </ItemTemplate>
</asp:TemplateColumn>

Min Sub som virker udmærket:

    Sub dgEmner_ItemDataBound(sender As Object, e As DataGridItemEventArgs)

        If e.Item.ItemType <> ListItemType.Header AND _
          e.Item.ItemType <> ListItemType.Footer then

          Dim deletebutton as LinkButton = e.Item.Cells(5).Controls(1)
          deletebutton.Attributes("onclick") = "java script:return confirm('Du sletter nu emne " & _
          DataBinder.Eval(e.Item.DataItem, "emneID") & "?')"

        End If

    End Sub

Jeg kan løse problemet ved at flytte delete foran edit kolonnen, men det er ikke optimalt, så hvis du (thrytter) kan implementere din løsning i min er der point.

på forhånd tak
Avatar billede thrytter Nybegynder
28. januar 2004 - 12:22 #7
Prøv at udskifte e.item.cells(5).controls(1) med e.Item.FindControl("lnkDelete")...

Du burde måske også udskifte

e.Item.ItemType <> ListItemType.Header AND e.Item.ItemType <> ListItemType.Footer

med

e.Item.ItemType = ListItemType.Item Or e.Item.ItemType =  ListItemType.AlternatingItem
Avatar billede cuac Nybegynder
28. januar 2004 - 12:41 #8
Point til dig thrytter. Virker når begge rettelser bliver implementeret.

Tak
Avatar billede cuac Nybegynder
27. juli 2004 - 10:54 #9
Efter lidt forsøg frem og tilbage har jeg løst det
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