[ASP] Repeater i ustawianie wartości TEXT dla etykiety

0

Witam

Zaczynam prace z ASP.NET i na starcie mam problem.

Używam kontrolki asp:Repeater w której chciałbym stworzyć pewną ilość powiedzmy Labeli. źródłem danych dla repeateraz jest zapytanie sql które zwraca 3 wartości tekstowe: x, y, z. chciałbym teraz stworzyć tyle labeli ile jest zwracanych wartości z tekstem tej wartości.

Problem wygląda nastepująco:

Pod właściwość TEXT etykiety podstawiam <%# Eval("SYMBOL") %>.

Cały kod wygląda następująco:

<asp:SqlDataSource ID="sqlSymbol" runat="server" 
            ConnectionString="<%$ ConnectionStrings:WebOEEConnectionString %>" 
            SelectCommand="SELECT DISTINCT [SYMBOL] FROM [TABELA] WHERE ([SYMBOL] IS NOT NULL)">
        </asp:SqlDataSource>

<asp:Repeater ID="Repeater1" runat="server" DataMember="DefaultView" DataSourceID="sqlSymbol">
        <ItemTemplate>
            <div>
                <asp:Label ID="l1" runat="server" Text="<%# Eval("SYMBOL") %>"></asp:Label>
            </div>
        </ItemTemplate>
</asp:Repeater>

podczas kompilacji dostaje błąd:
Tag server nie zostałdobrze uformowany.

Podobny błąd występuje gdy chcę stworzyć obiekt saldatasource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                                    ConnectionString="<%$ ConnectionStrings:WebOEEConnectionString %>"
                                    SelectCommand="SELECT [NAZWA] FROM [TABELA] WHERE (([SYMBOL] = @SYMBOL))">
                    <SelectParameters>
                        <asp:ControlParameter Name="SYMBOL" DefaultValue='<%# Eval("SYMBOL") %>' Type="String" />
                    </SelectParameters>
                </asp:SqlDataSource>

dokładna treść błędu to:
Wyrażenia wiązania danych są obsługiwane tylko w obiektach, ktre mają zdarzenie DataBinding. System.Web.UI.WebControls.ControlParameter nie ma zdarzenia DataBinding.

Znalazłem w kilku książkach przykłady w których wykorzystuje się taką konstrukcję np:

<asp:Image ID="Icon" runat="server"
                              ImageUrl='<%# Eval("Icon") %>'
                              ImageAlign="AbsMiddle" />

I według autorów powinno to działać.

Proszę o pomoc.

0

Twój kod różni się jednym bardzo istotnym szczegółem. używasz podwójnego cudzysłowy, a w przykładzie masz jaki?...

nie możesz używać eval wewnątrz sqldatasource. tak na logikę - jaką wartość ma zwrócić eval? jeśli chcesz wykonać tyle zapytań, ile rekordów zwróci inne zapytanie - to też złe rozwiązanie, fatalna wydajność.

0

rekordów zapytaniu dla repeatera będzie około 5-7.

Pojedyncze cudzysłowy nic nie zmieniają.

To może ktoś ma jakiś pomysł jak zrobić to w inny sposób ?

0

masz dwa przykłady z kodu, nad którym aktualnie pracuję, oba działają bezproblemowo. musisz robić łąd w innym miejscu:

	<asp:Repeater ID="rep" DataSourceID="ContestsDS" runat="server">
		<ItemTemplate>
			<div class="object">
				<img src='<%# Eval("bannerSmall") %>' alt=''/>
			</div>
...
        <asp:GridView ID="gvList" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="SlajdShowId">
            <Columns>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="lnkEdycja" runat="server" CommandArgument='<%# Bind("SlideShowId") %>' CommandName="Select" Text="Edytuj"/>
...

co do drugiego problemu: http://support.microsoft.com/default.aspx?scid=kb;en-us;306154

1 użytkowników online, w tym zalogowanych: 0, gości: 1