Avatar billede Syska Mester
01. november 2007 - 20:10 Der er 8 kommentarer og
1 løsning

GridView med DropDownList, hvad gør jeg galt ?

Hej,

Jeg roder med et GridView hvor jeg vil have smidt en DropDownList liste ind ... det virker sådan fint så langt jeg er nået, men er rundt ind i et problem ...

Da jeg kalder
e.Cancel = true;
Til sidst i OnRowEditing="gv_RowEditing" eventen ... bliver de CommandButton ikke lavet om til Cancel og Update for den row .... u stedet er de stadig "Edit" og "Delete" ...
Det virker hvis jeg sætter "e.Cancel = false" men så er mine tekst felter og min DropDownListe tom ....

Tror snart jeg har prøvet alt ... men det lader ikke til at det er det CommandField object kan bruges til meget ...

Hvordan kan det løses ? Jeg er totalt lost her ...

Sig til hvis der skal bruges mere info ...

Kode:

cs filen ....
protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
    // Response.Write("test ... ");
    int id = Syska.Misc.GetSelectedID(ddlShowGroup);
    if (id == 0)
        return;

    //gv.EditIndex = e.NewEditIndex;
    //UpdateContent();

    DropDownList ddl = GridView1.Rows[e.NewEditIndex].FindControl("ddl") as DropDownList;
    if (ddl == null)
        return;

    TextBox name = GridView1.Rows[e.NewEditIndex].FindControl("name") as TextBox;
    if(name == null)
        return;

    TextBox url = GridView1.Rows[e.NewEditIndex].FindControl("url") as TextBox;
    if(url == null)
        return;

    ddl.Visible = true;
    name.Visible = true;
    url.Visible = true;

    lg.GetGroups(ddl.Items);           
    Syska.Misc.SetSelected(ddl, id);

    CommandField cf = GridView1.Columns[0] as CommandField;
    if (cf == null)
        return;

    cf.ShowCancelButton = true;
    //GridView1.Rows[e.NewEditIndex].Cells[0].
}




aspx filen .....
<asp:GridView ID="GridView1" OnRowEditing="gv_RowEditing" runat="server" CssClass="gridview" DataSourceID="ObjectDataSource1" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="LinkID"  CellPadding="4" Width="100%">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
        <asp:TemplateField Visible="true" ItemStyle-Width="500px">
       
            <ItemTemplate>
                <asp:HyperLink ID="hl" runat="server" NavigateUrl='<%# "~/goto.aspx?LinkID=" + Eval("LinkID") %>' Text='<%# Eval("Name") %>' />
               
                <asp:TextBox ID="name" runat="server" Visible="false" />
                <asp:TextBox ID="url" runat="server" Visible="false" Text='<%# Eval("Url") %>' />
                <asp:DropDownList ID="ddl" runat="server" Visible="false" />
            </ItemTemplate>
           
            <EditItemTemplate>
                <asp:TextBox ID="name" runat="server" />
                <asp:TextBox ID="url" runat="server" Visible="true" Text='<%# Eval("Url") %>' />
                <asp:DropDownList ID="ddl" runat="server" />
            </EditItemTemplate>
           
        </asp:TemplateField>   
        <asp:BoundField DataField="Hits" HeaderText="Hits" SortExpression="Hits" ReadOnly="true" />
        <asp:BoundField DataField="Added" HeaderText="Added" SortExpression="Added" ReadOnly="true" />
    </Columns>
   
    <HeaderStyle BackColor="#DFD3BA"  />
</asp:GridView>
Avatar billede 2c Nybegynder
02. november 2007 - 08:30 #1
I din ItemTemplate er visisble sat til false på din controls
Avatar billede Syska Mester
02. november 2007 - 09:25 #2
Ja ... i know

Meningen er at Editview skal vise en DDL, mens itemview skal vise anden info ... jeg er bare totalt lost om hvordan man lige gør det ...

Indtil videre bruger jeg en div popup med en DDL, da jeg ikke har kunnet få det andet til at virke endnu ...

Og laver også til at google giver mig ret i at mange har det problem ...

// ouT
Avatar billede neoman Novice
03. november 2007 - 10:41 #3
Det er ikke nødvendigt selv at sætte controller visible=false/true, fordi når en række går i editmode, så vises EditItemTemplate (og de tilhørende knapper i CommandFiled, indtil du trykker update eller cancel. Det samme gælder knapperne.

For at set hvordan det virker, bare lav et nyt gridview med Enable editing = true, og lav en kolonne om til templatefield. Der vil du også kunne se, at du formentligt  mangler en Bind (såfremt dine ændringer skal skrives tilbage til variablen).
Avatar billede Syska Mester
03. november 2007 - 14:34 #4
ja ... der ligger mit problem.

Jeg laver 1 db udtræk til view ... jeg vil ikke til at hente mere her ...

Til edit mode, ville jeg lave et db udtræk, så jeg kunne skifte gruppe på elementerne ... men jeg kan ikke finde de controls som ligger i EditItemTemplate, derfor har jeg dem med i ItemTemplate ....

Tror jeg mangler lidt viden om hvordan den control virker ...

Jeg kan godt følge hvad du siger ... men det hjælper mig bare ikke.

// ouT
Avatar billede neoman Novice
03. november 2007 - 14:38 #5
Har du prøvet det jeg foreslog ?
1.lav en lille tabel med to kolonner : ID, mintext.
2. Lav en datasource som hiver tabellen ind, og som også genererer insert/update/delete
3. Opret et gridview som bruger datasourcen, og enable edit på det.
4. Lav minText-kolonnen om til template field.

Så har  du et eksempel på hvordan man gør i din aspx mark up.
Avatar billede neoman Novice
03. november 2007 - 14:49 #6
Avatar billede Syska Mester
03. november 2007 - 18:57 #7
Ja, men hvad får jeg ud af at prøve det ?

Jeg kan godt oprette, mixe, ændre etc. ikke der mit problem ligger. Hvis du læser mit spm igen ... så er det ikke et spm om at lave det. Jeg skal have en DropDownList når jeg er i EditMode på den pågældende row ... og det løser dit foreslag ikke.

Normal: Label, Label, Label
EditMode: Textbox, Textbox, DropDownList

Men da jeg ikke kan finde min DropDownList når jeg hopper over i EditMode har jeg sat Visable sat til false ... på ItemTemplate.

Linket giver samme foreslag til at finde mine controls som jeg allerede bruger:
DropDownList ddl = GridView1.Rows[e.NewEditIndex].FindControl("ddl") as DropDownList;

Men ikke hvordan man finder dem som ligger i EditItemTemplate ...

// ouT
Avatar billede neoman Novice
03. november 2007 - 19:47 #8
Ok - jeg fatter ikke hvad du ønsker.

Der findes ikke templates at vælge imellem at runtime, kun kontroller. Når dit gridview er i editmode, så er der kun en række som viser de kontroller som ligger i EditItemTemplate, mens alle andre rækker viser indholdet af ItemTemplate.

Hvis du forklarer præcist step-by-step (som til de tungnemme) hvad du ønsker at opnå, så kan jeg muligvis hjælpe dig, ellers er det lidt uproduktivt at gætte sig frem.
Avatar billede Syska Mester
06. januar 2008 - 04:29 #9
lukker ... blev ikke løst ... lavede det på en helt anden måde ...

// ouT
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