Avatar billede qumle Nybegynder
17. august 2004 - 15:00 Der er 5 kommentarer og
1 løsning

adgang til controller i datagrid

Jeg har et datagrid i en usercontrol

asp:DataGrid
        ID='grid'
        CellPadding='4'
        CellSpacing='0'
        Border='0'
        Width='100%'
        AutoGenerateColumns='false'
        GridLines='None'
        OnDeleteCommand='OnDelete'
        OnEditCommand='OnEdit'
        OnCancelCommand='OnCancel'
        OnUpdateCommand='OnUpdate'
        ItemStyle-VerticalAlign='top'
        ShowFooter='true'
        Runat='Server'>
   
    <EditItemStyle CssClass='tableEditItem' />
    <HeaderStyle CssClass='tableHeader' />
    <ItemStyle CssClass='tableItem' />
    <AlternatingItemStyle CssClass='tableAlternatingItem' />
    <FooterStyle CssClass='tableFooter' />
   
    <Columns>
        <asp:TemplateColumn>
            <HeaderTemplate>
               
            </HeaderTemplate>
            <ItemTemplate>
                <asp:Label Runat=server>Name</asp:Label>
                <asp:Label ID="lblItemName" Runat=server><%#((KeyedReference)Container.DataItem).KeyName%></asp:Label>
                <br>
                <asp:Label Runat=server>Value</asp:Label>
                <asp:Label ID="lblItemValue" Runat=server><%#((KeyedReference)Container.DataItem).KeyValue%></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:Label Runat=server>Name</asp:Label><asp:DropDownList ID="dropTModels" OnSelectedIndexChanged="drop_Changed" DataSource=<%#keyNames%> Runat=server/>
                <asp:TextBox ID="txtItemName" Runat=server>"fgsdfg"</asp:TextBox>
                <br>
                <asp:Label Runat=server>Value</asp:Label><asp:TextBox ID="txtItemValue" Runat=server></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderStyle-Width='150px'>
            <HeaderTemplate>
           
            </HeaderTemplate>
            <ItemTemplate>
                <asp:Button ID="btnEdit" Text="Edit" CommandName='Edit' Runat=server/>
                <asp:Button ID="btnDelete" Text="Delete" CommandName='Delete' Runat=server/>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:Button ID="btnOK" Text="Update" CommandName='Update' Runat=server/>
                <asp:Button ID="btnCancel" Text="Cancel" CommandName='Cancel' Runat=server/>
            </EditItemTemplate>
            <FooterTemplate>
                <asp:Button ID="btnAdd" OnClick="OnAdd" Text="Add category item" Runat=server/>
            </FooterTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

når der trykkes på knappen "btnEdit"
<asp:Button ID="btnEdit" Text="Edit" CommandName='Edit' Runat=server/>

skal editTemplate vises med de indtastede værdier vist i hver deres TextBox.

eventhandler for btnEdit:

protected void OnEdit(object sender, DataGridCommandEventArgs e)
        {
            grid.EditItemIndex=e.Item.ItemIndex;
            kRefColl =(KeyedReferenceCollection)Session["kRefColl"];
            KeyedReference kRef = kRefColl[e.Item.ItemIndex];
            keyName = kRef.KeyName;
            keyValue = kRef.KeyValue;
       
            grid.DataSource=kRefColl;
            grid.DataBind();

            TextBox box = (TextBox)(e.Item.FindControl("txtItemName"));
            box.Text = "keyName";
        }
her sker en NullReferenceException på mit box object.

kan det have noget at gøre med at mit dataGrid ikke er i editmode når der trykkes på edit, og derfor "eksisterer" TextBoxen ikke?

hvordan kan jeg ellers få fat i den?
Avatar billede finger Nybegynder
17. august 2004 - 15:08 #1
hvad er det du vil opnå med dette? at få vist værdierne i textboxes sker jo automatisk når grid.EditItemIndex=e.Item.ItemIndex;
bliver sat.
Avatar billede qumle Nybegynder
17. august 2004 - 15:28 #2
øhh nej så er de tomme
Avatar billede qumle Nybegynder
17. august 2004 - 15:32 #3
jeg har løst det ved at tilføje følgende attribut i textboxen
Text ='<%#((KeyedReference)Container.DataItem).KeyName%>'

grunden til at jeg ikke gjorde det på denne måde i første omgang var at Visual studios intellisense ikke kendte Text attributten for en TextBox... Det syns jeg også virkede lidt mærkeligt.

Men selvom je har løst det på anden måde vil jeg stadig gerne høre om der er nogen der kan se hvorfor jeg får ovennævnte nullReferenceException
Avatar billede qumle Nybegynder
17. august 2004 - 16:09 #4
ekstra spørgsmål, (med ekstra point 30 stk)
<asp:DropDownList ID="dropTModels" OnSelectedIndexChanged="drop_Changed" DataSource=<%#keyNames%> Runat=server/>
<asp:TextBox ID="txtItemName" Runat=server></asp:TextBox>

Textboxen skal kun vises hvis et bestemt index er valgt i dropdownListen.
Jeg forsøgte sådan her
<asp:TextBox ID="txtItemName" Visible='<%#dropTModels.SelectedIndex!=0%>' Runat=server></asp:TextBox>

men får fejlen type or namespace dropTModel could not be found.

Er der fordi koden imellem <%# og %> refererer til codebehind filen? i så fald bringer det mig tilbage til mit første problem, at hive en kontrol ud af editItemTemplate i DataGrid...
Avatar billede snepnet Nybegynder
21. august 2004 - 13:11 #5
Du har ikke i din EditItemTemplate angivet at du ønsker at få vist noget tekst i TextBoxen.
Du bliver nødt til at lave samme trick på boksen som på din label i EditItemTemplate :
Text = '<%#((KeyedReference)Container.DataItem).KeyName%>'

Det eneste du så behøver at gøre i OnEdit er :
sæt EditItemIndex (som finger skrev), og kalde databind (som du gør i forvejen).

Mvh
Avatar billede snepnet Nybegynder
02. oktober 2004 - 03:18 #6
hej gumle :o)
hvis du gerne vil lukke her, og du synes jeg har været behjælpelig får du lige et svar.
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
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