Avatar billede websam Nybegynder
03. august 2006 - 12:14 Der er 26 kommentarer og
1 løsning

Gridview og HyperLinkField ?

Hejsa,

Jeg har lavet et gridview hvori jeg har et par HyperLinkField. Dem skal jeg have til at gøre noget når der klikkes på dem.

<asp:GridView runat="server" id="ListRoles" AutoGenerateColumns="False" Width="100%" >
                <HeaderStyle BackColor="Navy" ForeColor="White" />
                <Columns>
                    <asp:TemplateField HeaderText="Role">
                        <ItemTemplate>
                            <%# Container.DataItem.ToString() %>
                        </ItemTemplate>
                        <HeaderStyle HorizontalAlign="Left" />
                    </asp:TemplateField>
                    <asp:HyperLinkField HeaderText="Add / Manage role" Text="Manage">
                        <HeaderStyle HorizontalAlign="Left" />
                    </asp:HyperLinkField>
                    <asp:HyperLinkField Text="Delete" />
                </Columns>
            </asp:GridView>

Min "Manage" Hyperlink skal sende bruger videre til en side med mulighed for at håndtere den valgte rolle.

Min "Delete" skal slette den valgte rolle og gerne med en popup der spørger "er du sikker på di vil slette ?"

Hvordan går jeg dette ?

/Websam
Avatar billede websam Nybegynder
03. august 2006 - 12:16 #1
Det er ikke sikkert at jeg skal bruge hyperlinks, men måske linkbuttons istedet, men forklar venligst hvad jeg skal gøre for at få det til at virke ;o)
Avatar billede snepnet Nybegynder
03. august 2006 - 12:28 #2
Link til anden side sådan her:
<asp:HyperLinkField DataNavigateUrlFields="PersonId" DataNavigateUrlFormatString="DetailsFormView.aspx?personId={0}" Text="Edit in FormView" />
(ret til for dit scenarie ;o)
Mvh
Avatar billede snepnet Nybegynder
03. august 2006 - 12:28 #3
Den med delete:
<asp:CommandField ShowDeleteButton="True" />
Mvh
Avatar billede dr_chaos Nybegynder
03. august 2006 - 12:29 #4
du kan gøre noget i denne stil:
<asp:Button ID="Button2" runat="server" OnClientClick="return confirm('Er du sikker på at du ønsker at slette denne nyhed?');" CommandArgument=<%# DataBinder.Eval(Container.DataItem, "NyhedsID") %> OnClick="Slet_Click" CssClass="smallbutton" Text="Slet" />
Avatar billede dr_chaos Nybegynder
03. august 2006 - 12:31 #5
og smide det i et template field
Avatar billede websam Nybegynder
03. august 2006 - 12:34 #6
Jeg har indsat to linkbuttons istedet for hyperlinks. Når jeg så klikker på min manage button får jeg følgende i min codebehind :

protected void btn_Manage_Click(object sender, EventArgs e)
    {

    }

Her skal jeg så foretage mig et eller andet som hiver rolen med over til en ny side hvor jeg kan lave diverse ting med den.

Det samme gør sig gældende for min "Delete" button den har denne kode :

protected void btn_Delete_Click(object sender, EventArgs e)
    {

    }

Her skal jeg have lavet en ting der kan poppe en "Vil du slette ?" og derefter kalde metoden fra Roleprovideren til at slette rolen.

/Websam
Avatar billede dr_chaos Nybegynder
03. august 2006 - 12:36 #7
du kan bruge OnClientClick="return confirm('Er du sikker på at du ønsker at slette denne nyhed?');" på din linkbutton.
og

OnClick="btn_Delete_Click"
Avatar billede websam Nybegynder
03. august 2006 - 12:37 #8
Der er bare det ved det at jeg kun har selve role navnet fra databasen jeg mener ikke der trækkes andet med når jeg anvender Roles.GetAllRoles fra SqlRoleProvideren ?

/Websam
Avatar billede dr_chaos Nybegynder
03. august 2006 - 12:39 #9
Du sletter jo så vidt jeg husker en role ud fra navnet og du kan sætte

CommandArgument=<%# Eval("RoleName") %>
eller noget i den stil.
Avatar billede websam Nybegynder
03. august 2006 - 12:45 #10
Der kom jeg frem til at den skulle have <%# Container.DataItem.ToString() %> for at kunne vise den angivet role i den første række.

<%# Eval("RoleName") %> giver mig en fejl der siger :

DataBinding: 'System.String' does not contain a property with the name 'RoleName'.

Hvilket jeg ikke helt fatter ?
Avatar billede dr_chaos Nybegynder
03. august 2006 - 12:50 #11
Hvilke kolonner er der i den collection du bruger til at vise data i gridviewet med ?
Avatar billede websam Nybegynder
03. august 2006 - 12:55 #12
Gridviewet ser sådan her ud :

<asp:GridView runat="server" id="ListRoles" AutoGenerateColumns="False" Width="100%" >
    <HeaderStyle BackColor="Navy" ForeColor="White" />
    <Columns>
        <asp:TemplateField HeaderText="Role">
            <ItemTemplate>
                <%# Container.DataItem.ToString() %>
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="Left" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Add / Manage role" ShowHeader="False">
            <HeaderStyle HorizontalAlign="Left" />
            <ItemTemplate>
                <asp:LinkButton ID="btn_Manage" runat="server" CausesValidation="false" CommandName=""
                                Text="Manage" OnClick="btn_Manage_Click"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="btn_Delete" runat="server" CausesValidation="false" CommandName=""
                                Text="Delete" OnClick="btn_Delete_Click" OnClientClick="return confirm('Er du sikker på at du ønsker at slette denne nyhed?');"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
Avatar billede websam Nybegynder
03. august 2006 - 13:08 #13
Der misforstod jeg dig, da jeg benytter den indbyggede SqlRoleProvider ved jeg ikke hvad jeg har af kolonner i den collection. Jeg har søgt på msdn, men har ikke kunne finde noget på det ?

I det eksempel de har på msdn bruges der blot <%# Container.DataItem.ToString() %> og det fatter jeg ikke helt for jeg bruger da normalt noget i denne stil til at finde en given kolonne :

<%# DataBinder.Eval(Container.DataItem, "En Kolonne")%>

/Websam
Avatar billede websam Nybegynder
03. august 2006 - 13:11 #14
Men når jeg bruger <%# DataBinder.Eval(Container.DataItem, "En Kolonne")%> ja så får jeg blot denne fejlbesked :

DataBinding: 'System.String' does not contain a property with the name 'RoleName'.
Avatar billede dr_chaos Nybegynder
03. august 2006 - 13:14 #15
Du kan nøjes med <%# Container.DataItem.ToString() %>
hvis du har kolonne navne bruger du <%# Eval("RoleName") %> eller <%# Bind("RoleName") %>
i 2.0 bruger man ikke databinder osv.
Avatar billede snepnet Nybegynder
03. august 2006 - 13:22 #16
Container.DataItem er tilstrækkeligt.
Mvh
Avatar billede websam Nybegynder
03. august 2006 - 13:22 #17
Ok har lige testet det med begge dine forslag.

Bind("RoleName") giver denne fejl :

A call to Bind must be assigned to a property of a control inside a template.

Eval("RoleName") giver denne fejl :

DataBinding: 'System.String' does not contain a property with the name 'RoleName'.

hvad skyldes det så ?

/Websam
Avatar billede websam Nybegynder
03. august 2006 - 13:25 #18
Men med når jeg kan bruge <%# Container.DataItem.ToString() %> er det oxo fint så mangler jeg bare noget hjælp til at få fat i rolename i denne :

protected void btn_Manage_Click(object sender, EventArgs e)
    {

    }

Hvordan fåe jeg den med over ?

/Websam
Avatar billede websam Nybegynder
03. august 2006 - 13:35 #19
altså skal jeg frem til at jeg kan lave :

string roleName = et - eller - andet;

hvor "et - eller - andet" skal erstattes med noget kode der trækker i Role navnet fra gridview'et ?

/Websam
Avatar billede dr_chaos Nybegynder
03. august 2006 - 13:58 #20
brug :
CommandArgument=<%# Container.DataItem.ToString()  %>
på din linkbutton

i btn_Manage_Click laver du

linkbutton lb =(linkbutton)Sender;
string rolename= lb.CommandArgument;
Avatar billede websam Nybegynder
03. august 2006 - 14:20 #21
ok så har jeg lavet følgende :

<asp:LinkButton ID="btn_Delete" runat="server" CausesValidation="false" CommandName="" CommandArgument=<%# Container.DataItem.ToString() %>
                                Text="Delete" OnClick="btn_Delete_Click" OnClientClick="return confirm('Er du sikker på at du vil slette?');"></asp:LinkButton>

Og i codebehind har jeg :

protected void btn_Delete_Click(object sender, EventArgs e)
    {
        LinkButton deleteRole = (LinkButton)sender;
        string roleName = deleteRole.CommandArgument;
        Roles.DeleteRole(roleName);
    }

Men det giver følgende fejl :

The parameter 'roleName' must not be empty.
Parameter name: roleName

Hvilket jo blot fortæller mig at roleName ikke har nogen værdi ?

/Websam
Avatar billede dr_chaos Nybegynder
03. august 2006 - 14:25 #22
prøv lige med CommandName og se om den gør det samme der.
Avatar billede websam Nybegynder
03. august 2006 - 14:26 #23
Sorry my bad det så ud til at jeg havde noget cache hængende det virker fint, tak for hjælpen det sparede mig lige for flere timers arbejde ;o)

/Websam
Avatar billede dr_chaos Nybegynder
03. august 2006 - 14:30 #24
hehe det er altid godt :)

tillader mig lige at ligge et svar hvis du er tilfreds.
Avatar billede websam Nybegynder
03. august 2006 - 14:33 #25
Det ser ud til at virke helt efter planen så har jeg lidt at bygge videre på det var som bare det med at få en værdi med over til en metode jeg ikke helt fattede i det gridview ;o)

Men tro mig der skal nok komme andre spørgsmål hen af vejen (jeg har ikke benyttet gridview ret meget.) *GG*

/Websam
Avatar billede dr_chaos Nybegynder
03. august 2006 - 14:38 #26
hehe
Det kan være du lige skal kigge lidt på denne tutorial:
http://www.asp.net/QuickStart/aspnet/doc/ctrlref/data/gridview.aspx

Måske kan du lære lidt der :)
Avatar billede websam Nybegynder
03. august 2006 - 15:17 #27
Det vil jeg ligge kigge lidt nærmere på ;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