webForumDet fria alternativet
Logga in / Bli medlem

Problem med webserverkontroller i datagrid

.NET

2 svar · 222 visningar · startad av margar-0

Medlem sedan nov. 200362 inlägg
Trådstart#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...
Medlem 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.

Medlem 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.

260 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)