Toon posts:

[ASP.NET/C#] - Geselecteerde item in Datalist leeg?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een Datalist op mijn ASPX-pagina staan, de HTML-code:

code:
1
2
3
4
5
6
7
8
9
10
11
<asp:DataList id="ProjectsDataList" runat="server">
<ItemTemplate>
    <asp:linkbutton id="selectBtn" runat="server" Text="S" CommandName="select">
        <%# DataBinder.Eval(Container.DataItem, "Cost_desc") %>
    </asp:linkbutton><br>
</ItemTemplate>
<SelectedItemTemplate>
    <asp:Label id="SelItem" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Cost_desc") %>'>
    </asp:Label><br>
</SelectedItemTemplate>
</asp:DataList></P>

M.b.v. deze code vraag ik het op:

code:
1
2
DataListItem selItem = ProjectsDataList.SelectedItem;
Session["ProjectID"] = ((System.Web.UI.WebControls.Label) selItem.FindControl("SelItem")).Text;

Nu blijkt dat deze Text leeg is. Heb dit met de volgende code uitgezocht:

code:
1
2
3
4
5
6
7
8
9
10
11
String s = "";
System.Web.UI.WebControls.Label l;
foreach (Object c in selItem.Controls) 
{
    l = c as System.Web.UI.WebControls.Label;
    if (l != null) 
    {
        s = s + l.Text;
    }
}
ShowMessage(s);

Hoe kan dit? De tekst verschijnt wel gewoon (wat onder ItemTemplate staat), maar in het SelectedItemTemplate is het opeens verdwenen...

Hoe ik aan deze code kom? Van MSDN

[ Voor 37% gewijzigd door Verwijderd op 19-09-2005 16:34 ]


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Ligt eraan waar je de code uitvoert. Als je die vul code in je pageload uitvoert en je controlleerd niet op een postback, dan kan het zijn dat je bij een nieuwe postback je hele datalist opnieuw aangemaakt wordt en dan ben je gegevens dus kwijt.

Verwijderd

Topicstarter
Daar had ik ook aan gedacht, on page load deed ik weer DataList.Databind(), maar het mocht niet baten.

Ik heb het daarom veranderd naar een ListBox, dat gaat tot nu toe wel goed:

code:
1
2
3
4
ProjectsListBox.DataSource = projects;
ProjectsListBox.DataTextField = "Cost_desc";
ProjectsListBox.DataValueField = "Cost_code";
ProjectsListBox.DataBind();


Dit gaat helemaal goed, SelectedItem.Value is dan de Cost_code en de Cost_desc verschijnt in de listbox :) Stuk makkelijker dan gekloot met templates en een datalist.

[ Voor 22% gewijzigd door Verwijderd op 20-09-2005 09:46 ]