webForumDet fria alternativet

Problem med webserverkontroller i datagrid

2 svar · 222 visningar · startad av margar-0

margar-0Medlem sedan nov. 200362 inlägg
#1

Jag har skapt en DataGrid där jag ska kunna redigera nyheter. Problemet är då jag ska skapa en webserverkontroll. Jag ställer mig mellan ItemTemplate och skriver som nedan en asp:Label. Problemet är att kontrollen aldrig registreras (Web Form Designer Generated Code) i Code-Behind vilket medför att jag inte kan komma åt kontrollens värde (tex lblId.Text). Om jag däremot drar i en label från toolboxen så registreras kontrollen och jag kan komma åt dess värde. Jag skulle ju kunna göra så men problemet är ju att kontrollen lägger sig under DataGriden och där vill jag ju inte ha den. Så jag provade sedan att klippa ut kontrollen och lägga in den mellan ItemTemplate-taggarna eftersom den är registrerad i Code-Behind. När jag gjort det och ska köra koden får jag fel "Object reference not set to an instance of an object"

Varför känner den inte av kontrollen i DataGriden?

<asp:TemplateColumn HeaderText="Nyhetsnr"> 
       <ItemTemplate> 
        <asp:Label id="lblId" runat="server" text='<%#Container.DataItem("id")%>'> 
             </asp:Label>  'Hittar inte i Code-Behind 
         </ItemTemplate>         
     </asp:TemplateColumn> 
<asp:TemplateColumn HeaderText="Rubrik"> 
       <ItemTemplate> 
        <asp:Label id="lblRubrik" runat="server" text='<%#Container.DataItem("id")%>'>  'Hittar inte i Code-Behind 
             </asp:Label> 
         </ItemTemplate> 
        <EditItemTemplate> 
          <asp:textbox id="txtRubrik" runat="server" textmode="multiline" 
           text='<%#Container.DataItem("rubrik")%>'>  'Hittar inte i Code-Behind 
          </EditItemTemplate>             
     </asp:TemplateColumn> 
osv...
cyprysMedlem sedan dec. 20003 563 inlägg
#2

Du skall köra findcontrol i en sub under OnItemDataBound.
Alltså en sub som körs för varje rad i datagriden.

PDahlenMedlem sedan apr. 2004778 inlägg
#3

I din code-behind, när är det du försöker göra något med kontrollerna?
Om du har en datagrid eller en repeater så måste du "hitta" kontrollen när du databinder. Kontrollen har ju olika värden för varje rad.

        Dim lblRubrikTmp As Label = CType(e.Item.FindControl("lblRubrik"), Label)

hittar din lblRubrik i den Item du har valt. Om du gör det i databind så kan du utföra saker med lblRubrik i alla rader.

Om du ska göra din edit så använder du ovanstående i din Edit funktion.

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)