Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 15:55 Der er 26 kommentarer og
1 løsning

dynamisk indsætning af user control

Hejsa

I min db har jeg file nanet på en række user controls. Jeg har også en 'show_position' værdi. Denne værdi viser i hvilken <td id="LeftPane" runat="server"></td> den skal indsættes.
Jeg kan godt indsætte hvis jeg smider alle unser controls ind samme sted men ikke hvis jeg forsøger at brug denne værdi.

Her er lidt kode:

while dtrModules.read()

Dim parent As Control = Page.FindControl(dtrModules ("show_position"))
   

   
parent.Controls.Add(Page.LoadControl(dtrModules("src")))
           
parent.Controls.Add(New LiteralControl("kiss my ass"))
parent.Visible = True
           

end while


pls help.
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 15:58 #1
jeg får følgende fejl:

System.NullReferenceException: Object reference not set to an instance of an object.

og jeg vil mene at det er i denne line fejlen ligger:

Dim parent As Control = Page.FindControl(dtrModules("show_position"))
Avatar billede disco_keld Nybegynder
03. maj 2003 - 16:01 #2
HEj cdm_kiwie!

Jeg kan desværre ikke hjælpe dig med dit problem, men fuck det lyder fedt det du har gang i der.

Når du for det til at virke, vil du så ikke sende mig source koden og et screen dump af din Db så jeg kan se hvordan den ser ud.

Håber at høre fra dig.

Min mail lvd@vip.cybercity.dk

Mvh

DK
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 16:03 #3
nu er det noget jeg laver for min arbejdsgiver så det må jeg sku ikke du.
Avatar billede burningice Nybegynder
03. maj 2003 - 17:20 #4
jeg går ud fra at dtrModules er en datareader?.

har du en kulonne i din db som hedder show_position, og sørger du for at hente den med ud i din SQL-statement?
Du skal forresten heller ikke skrive Page.FindControl, men this.FindControl, hvor this referer til den side du er på, eller også skal du have fat i en reference til den side som den control du vil finde er på. Husk forresten også at skriv dtrModules("show_position").ToString(), da FindControl tager en string som input :)
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 17:23 #5
ja det er en datareader. Jeg prøver lige.
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 17:26 #6
this er det ikke en c# ting ??
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 17:34 #7
dtrModules = cmdSelect.ExecuteReader()
 
   
 
    while dtrModules.read()
       
       
       
    Dim parent As Control = FindControl(dtrModules("show_position").ToString())
   
    If (Not parent Is Nothing)

       
    parent.Controls.Add(Page.LoadControl(dtrModules("src")))
           
        parent.Controls.Add(New LiteralControl("kiss my ass"))
        parent.Visible = True 
       
        else
          response.write ("fejl, kunne ikke finde control")
        end if
    end while

    dtrModules.Close()
    con.Close()
  end sub


Fejler endnu :(
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 17:35 #8
hvis jeg bruger this får jeg en fejl.

BC30451: Name 'this' is not declared.
Avatar billede burningice Nybegynder
03. maj 2003 - 17:37 #9
cdm_kiwie>> jo, this er en c#-ting, hedder Me i vb.net, så du skal skifte Page ud med Me. LoadControl er jo ikke en static-method, men en instanse-method, dvs at den skal bruges på et object, og ikke en klasse.
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 18:07 #10
Dvs jeg kan ikke bruge den som jeg gør nu ?
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 18:09 #11
For det virker heller ikke med Me.
Avatar billede burningice Nybegynder
03. maj 2003 - 18:21 #12
cdm_kiwie>> hm... kan du ikke komme med en lidt mere beskrivende fejlbesked... f.eks. hele outputtet ;)
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 18:33 #13
Her er hele min kode:

<%@ Page language="VB" debug="true"%>
<%@ Import NameSpace="System.Data" %>
<%@ Import NameSpace="System.Data.SqlClient" %>


<script runat="server">



  Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)

    Dim con AS SqlConnection
    Dim cmdSelect AS SqlCommand
    Dim dtrModules AS SqlDataReader

    con = New SqlConnection("Server=localhost;UID=keld;PWD=c-coy;Database=cms")
 
    cmdSelect = New SqlCommand("SELECT * FROM modules ORDER BY show_order",con)
    con.Open()
 
    dtrModules = cmdSelect.ExecuteReader()
 
   
 
    while dtrModules.read()
       
       
       
    Dim parent As Control = Me.FindControl(dtrModules("show_position"))
   
    If (Not parent Is Nothing)

       
    parent.Controls.Add(Page.LoadControl(dtrModules("src")))
           
        parent.Controls.Add(New LiteralControl("kiss my ass"))
        parent.Visible = True 
       
        else
          response.write ("fejl, kunne ikke finde control")
        end if
    end while

    dtrModules.Close()
    con.Close()
  end sub

</script>




<html>
<head>
  <title></title>
</head>
<body>

<form runat="server">

    <table border="1">
      <tr>
        <td id="LeftPane" valign="top" Visible="false" Width="170" runat="server">LeftPane:</td>
        <td id="RightPane" valign="top" Visible="false" Width="170" runat="server">RightPane:</td>
      </tr>
    </table>


</form>

</body>
</html>


Den skulle tilføje 2 user controls men jeg får teksten 'fejl, kunne ikke finde control' 2 gange.
Avatar billede burningice Nybegynder
03. maj 2003 - 18:39 #14
cdm_kiwie>> det er jo ikke nogen fejl-besked !!! kopier den fejl-besked du får her ind så vi andre kan se hvad det er som går galt.
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 18:51 #15
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 32:
Line 33:        
Line 34:     parent.Controls.Add(Page.LoadControl(dtrModules("src")))
Line 35:           
Line 36:        parent.Controls.Add(New LiteralControl("kiss my ass"))
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 18:53 #16
hvis jeg erstatter:

parent.Controls.Add(Page.LoadControl(dtrModules("src")))


med:

Dim parent As Control = Me.FindControl("LeftPane")


Så virker det men ikke med den værdi som der står i min db.
Avatar billede burningice Nybegynder
03. maj 2003 - 19:00 #17
så er det er dtrModules("src") som er tom... prøv at lav en null-tjeck på den først.

if (dtrModules("src") != null) then
  parent.Controls.Add(Me.LoadControl(dtrModules("src").ToString()))
Else
  ' Der var ikke noget i db'en
End If
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 21:30 #18
den er ikke null, hvis jeg laver en response.write så skriver den LeftPane.
Avatar billede burningice Nybegynder
03. maj 2003 - 21:35 #19
leftpane ?! du skal da have hele stien til din control, f.eks. "leftpane.ascx"
Avatar billede cdm_kiwie Nybegynder
03. maj 2003 - 23:17 #20
ja men først bestemmer jeg hvor den skal placeres og derefter indsætter jeg stien. Min user control hedder 'header.ascx', det er den værdi der står i dtrModules("src").
Avatar billede burningice Nybegynder
04. maj 2003 - 00:00 #21
Dim parent As Control = Me.FindControl(dtrModules("show_position").ToString())

If (parent != null) Then
  Dim myControl As Control = LoadControl(dtrModules("src").ToString())
  parent.Controls.Add(myControl)
Else
  'kontrol ikke fundet
End If
Avatar billede cdm_kiwie Nybegynder
04. maj 2003 - 10:47 #22
samme problem endnu med at parent ikke er noget. :( Det er sku underligt det her.

Hvis jeg erstatter:

Dim parent As Control = Me.FindControl(dtrModules("show_position").ToString())

med:
Dim parent As Control = Me.FindControl("LeftPane")

så virker det. Fatter det bare ik.
Avatar billede burningice Nybegynder
04. maj 2003 - 14:21 #23
det er meeeget underligt...

Response.Write(dtrModules("show_position").ToString())
'Dim parent As Control = Me.FindControl(dtrModules("show_position").ToString())

Hvad kommer der ud på siden?
Avatar billede cdm_kiwie Nybegynder
04. maj 2003 - 20:23 #24
Så står der rigtigt nok LeftPane eller RightPane alt efter hvilken post det er.
Avatar billede cdm_kiwie Nybegynder
04. maj 2003 - 20:41 #25
her er et screenshot aaf min db: http://www.payday.dk/db.gif
Avatar billede cdm_kiwie Nybegynder
05. maj 2003 - 12:57 #26
Jeg har lavet min kode totalt om så den bruger class og ikke bare en datareader. Af en eller ander grund så virker det. Men hvis du laver et svar så får du de 60 point for din hjælp.
Avatar billede burningice Nybegynder
05. maj 2003 - 22:09 #27
:)
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