Avatar billede musicchart.dk Nybegynder
18. september 2005 - 14:09 Der er 27 kommentarer og
1 løsning

Kalde objekt til DataBinder

Er der en måde man kan kalde et objekt til en DataBinder?

Fx:
<%# MitObjekt() %>

Hilsen,
Bjarke
Avatar billede snepnet Nybegynder
19. september 2005 - 15:19 #1
mmmmm.... kan du ikke skrive mere præcist hvad det er du vil?
det er lidt svært at se hvad du mener med MitObjekt()
mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 17:27 #2
Er det muligt at kalde et objekt fra min *.aspx.cs fil til en DataBinder. Det kan selvf. lade sig gøre til en label:

Label1.Text = MitObjekt();

... så får Label1 den værdi MitObjekt() smider ud.

Men jeg vil undgå at bruge en Label, og vil høre om det er muligt at få smidt den værdi MitObjekt() smider ud, vha. DataBinder.
Avatar billede snepnet Nybegynder
19. september 2005 - 17:36 #3
det er nok der jeg bliver lidt i tvivl - hvis du har et eller andet objekt, og skriver som du gør
mitObject() vil du aldrig få noget ud hvis du skriver i C# - det vil bare give dig en fejl.
såh... jeg er stadig i tvivl om hvad det er du ønsker der skal ske når du skriver:
<%# MitObjekt() %>

men hvis det er en eller anden metode eller property du vil kalde - på et eksisterende objekt - kan du godt gøre det med databinderen, hvis du altså er i en databindingskontekst.

kan jeg få dig til at skrive, hvad du ønsker at denne:
<%# MitObjekt() %>
skal blive til i din html?

og.... hvorfor du ikke vil bruge labels.

mvh
Avatar billede snepnet Nybegynder
19. september 2005 - 17:38 #4
hvilken version af bruger du for øvrigt (1.0/1.1/2.0) ?
mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 17:55 #5
public int MitObjekt()
{
  int i = 10;
  return i;
}


... hvis man kalder ovenstående MitObjekt(), vil det så ikke returnere 10?

Jeg bruger 1.1
Avatar billede snepnet Nybegynder
19. september 2005 - 18:05 #6
jo - men det er ikke et objekt.... det er bare en metode, og lige en metode som den du viser der, gør sig bedre som en property:

public int SomeNumber
{
  get{return 10;}
}

men - for lige at tage dit udgangspunkt:
<%# MitObjekt() %>
så vil det bliver kørt i forbindelse med databinding - og returnere 10 - men der vil ikke blive gjort noget med det.

hvis du ikke vil bruge en label kan du bruge en literalcontrol :

<asp:Literal id="ltSomeLiteral" runat="server" Text='<%# SomeNumber.ToString() %>'></asp:Literal>

den skriver udelukkende det ud som returneres af dit databindingudtryk (bliver ikke pakket ind i divs ol.).

mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 18:30 #7
Hvordan binder jeg så min metode til en LiteralControl ?
Avatar billede snepnet Nybegynder
19. september 2005 - 18:41 #8
du kalder bare DataBind() - sådan her:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataBind();
    }
}

mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 18:59 #9
Nå, lad os tage den helt fra starten af så:

Mit problem er at jeg ikke kan sætte en Label's .Text til en værdi, når den label ligger i en Repeater.
Gør jeg det, får jeg fejlen:


Detaljer om undtagelse: System.NullReferenceException: Objektreferencen er ikke indstillet til en forekomst af et objekt.
Avatar billede snepnet Nybegynder
19. september 2005 - 19:04 #10
den slags er der ikke noget ballade i - du har nok bare en mindre fejl i din kode så.

kan du ikke vise mig den datakilde du prøver at binde til + din repeater... eller i hvert fald tilstrækkeligt til at jeg kan se hvad det er der kikser.

mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 19:24 #11
*.aspx

<asp:Repeater id="Repeater1" Runat="server">
  <HeaderTemplate>
    <asp:Label id="Label11" runat="server"></asp:Label>
  </HeaderTemplate>
</asp:Repeater>


*.aspx.cs

private void Page_Load(object sender, System.EventArgs e)
{
  Label11.Text = "hej";
}
Avatar billede snepnet Nybegynder
19. september 2005 - 20:47 #12
den går heller ikke.

du kan ikke referere en label direkte på den måde når den ligger i en repeater, og hvis du skal have noget vist - skal du databinde mod en gyldig datakilde.

såh - f.eks.: - en metode til at returnere en testdatakilde:

DataTable GetSomeData()
{
  DataTable dt = new DataTable();
  dt.Columns.Add("kolonne", typeof(string));

  dt.Rows.Add("hej");
  dt.Rows.Add("med");
  dt.Rows.Add("dig");

  return dt;
}

og så med denne aspx:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblKolonne" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Kolonne") %>'></asp:Label><br />
    </ItemTemplate>
</asp:Repeater>       

og sådan en page_load her:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.Repeater1.DataSource = GetSomeData();
        this.Repeater1.DataBind();
    }
}

skulle du have noget at gå videre med.

mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 22:12 #13
Problemet er at jeg allerede har databundet min repeater til en ArrayList.
Avatar billede snepnet Nybegynder
19. september 2005 - 22:17 #14
det var bare for at du havde et eksempel - hvis du har en arraylist der indeholder det du vil have vist, bruger du selvfølgelig den.
men du kan starte med at skifte <HeaderTemplate> ud med <ItemTemplate>, og efterfølgende sikre dig, at du i dit databindingsudtryk angiver en property der findes på de objekter du har i din arraylist.
mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 22:48 #15
Nu har jeg jo et <ItemTemplate> som jeg bruger til at køre min ArrayList igennem med, det fungerer også fint. Jeg skal bare have fundet en måde, at så smidt en værdi op i <HeaderTemplate>
Avatar billede snepnet Nybegynder
19. september 2005 - 23:15 #16
det er en template .... du kan putte det ind i den du har lyst til.

<HeaderTemplate>
hej ... !
</HeaderTemplate>

mvh
Avatar billede musicchart.dk Nybegynder
19. september 2005 - 23:31 #17
ja, men værdien skal komme fra min *.aspx.cs kode :o)
Avatar billede snepnet Nybegynder
19. september 2005 - 23:36 #18
som vi skrev om tidligere:

<asp:Literal id="ltSomeLiteral" runat="server" Text='<%# SomeNumber.ToString() %>'></asp:Literal>

med sådan en property i din code-behind:

public int SomeNumber
{
  get{return 10;}
}

som fra 19/09-2005 18:05:53

mvh
Avatar billede snepnet Nybegynder
22. september 2005 - 13:41 #19
how goes?
mvh
Avatar billede musicchart.dk Nybegynder
22. september 2005 - 16:44 #20
Ved at kopiere din kode fra: 19/09-2005 23:36:16
har jeg endnu ikke fået det til at virke. Så jeg droppede det, og smed en label uden for min Repeater istedet.
Men smid endelig et svar, som tak for indstatsen.
Avatar billede snepnet Nybegynder
22. september 2005 - 16:48 #21
ok - du kan godt få et svar, men jeg følger dig da gerne til dørs her :o)
du er med på at den der literal skal ind i din headertemplate ikke?
mvh
Avatar billede musicchart.dk Nybegynder
22. september 2005 - 19:05 #22
Jo :o) min Literal er i min HeaderTemplate.

...

<HeaderTemplate>
  <asp:Literal id="ltSomeLiteral" runat="server" Text='<%# SomeNumber.ToString() %>'></asp:Literal>
</HeaderTemplate>

....

*.aspx.cs

public int SomeNumber
{
  get{return 10;}
}



- stadig samme fejl.
Avatar billede snepnet Nybegynder
22. september 2005 - 19:09 #23
prøv lige at smid fejlen herud - det virker ret usansynligt at det er den kode du har lagt der der giver en fejl.
mvh
Avatar billede musicchart.dk Nybegynder
22. september 2005 - 19:13 #24
Jeg mener det er fejlen:

Detaljer om undtagelse: System.NullReferenceException: Objektreferencen er ikke indstillet til en forekomst af et objekt.

... men jeg er sikker, og skal ud ad døren nu. Men kommer igen senere i aften.
Avatar billede musicchart.dk Nybegynder
22. september 2005 - 19:14 #25
men jeg er IKKE sikker*
Avatar billede snepnet Nybegynder
22. september 2005 - 19:18 #26
check det næste gang du sidder med det så - der er ikke noget i det der kan medføre null... problemet ligger et andet sted.
- jeg tror jeg sidder her hele aftenen.
mvh
Avatar billede musicchart.dk Nybegynder
22. september 2005 - 22:39 #27
Følgende returnerer intet:

*.aspx.cs

private void Page_Load(object sender, System.EventArgs e)
{
  if (!IsPostBack)
  {
    DataBind();
  }
}

public int SomeNumber
{
  get{return 10;}
}


*.aspx

<asp:Repeater id="Repeater1" runat="server">
  <HeaderTemplate>
    <asp:Literal id="Literal1" runat="server" Text='<%# SomeNumber.ToString() %>'></asp:Literal>
  </HeaderTemplate>
</asp:Repeater>
Avatar billede snepnet Nybegynder
23. september 2005 - 00:30 #28
du skal give noget data til din repeater - eller får du ikke noget at se.
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