2012-08-28 2 views
0

Я довольно новичок в ASP.net, и я пытаюсь проверить некоторые результаты из моей SQL DB.Проверка вывода из ретранслятора

Я хочу протестировать, если «img» из моей БД настроен на somthing, и если я не буду его выводить.

<asp:SqlDataSource ID="selectFromNews" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString1 %>" 
    ProviderName="<%$ ConnectionStrings:DatabaseConnectionString1.ProviderName %>"  
    SelectCommand="SELECT * FROM [news] ORDER BY [time] DESC"> 
</asp:SqlDataSource> 

<asp:Repeater ID="newsRepeater" runat="server" DataSourceID="selectFromNews" onitemcommand="newsRepeater_ItemCommand"> 
    <HeaderTemplate></HeaderTemplate> 
    <ItemTemplate> 
     <div class="newsBox"> 
      <h1><%# Eval("title") %></h1> 
      /* Test if "img" is set to somthing, and output it here, if not, do somthing else */ 
      <p><%# Eval("text") %></p> 
     </div> 
    </ItemTemplate> 
    <FooterTemplate></FooterTemplate> 
</asp:Repeater> 

Я думал получение данных из behindcode, а затем проверить и отправить выход обратно к буквальному, но не знаю, как я бы доступ к данным повторителей оттуда?

+0

использования события ItemDataBound –

ответ

3

первый дополнительный контроль изображения в Repeater в

<asp:Image ID="ImageID" runat="server" ImageUrl='<%# Eval("img")%>' Visible="false" /> 

затем получить этот контроль изображения в ItemDataBound случае повторителя, как

 protected void YourRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 
      if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 
      { 
       Image ImageID= e.Item.FindControl("ImageID") as Image; 
       // now play with your ImageID control.. 
      } 
     } 
+0

Как этот подход, но я получаю Сообщение об ошибке Parser: тег сервера плохо сформирован. At: " Visible = "false" /> –

+0

Обнаружено ... использовано: ImageUrl = ' <% # Bind ("img")%> ' –

+0

я обновляю ответ ... исправление, которое вы сделали, прав ... thanx ... – Usman

0

К сожалению, использование блоков <% If ... Else ... End %> в репитерах недоступно (поверьте, я так долго их хотел).

Самый простой способ сделать это - вызвать функцию с кодом. Например ...

protected string MyFunction(RepeaterItem row) 
{ 
    // return based on row.DataItem value 
    return (row.DataItem.ImgExists ? "Image" : "No Image"); 
} 

А потом в разметке, вы просто передать объект Container ...

<%#MyFunction(Container)%> 

EDIT ... хотя для более сложных визуальных изменений, я бы рекомендовал ItemDataBound решения, что Тим и Усман (и Нихил) обеспечивают

0

Вы должны использовать ItemDataBound события ретранслятора:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    RepeaterItem ri = e.Item; 
    DataRowView dr = (DataRowView)ri.DataItem; 
    Panel Panel1 = (Panel)ri.FindControl("Panel1"); 
    // do your evaluation here according the values in the DataRowView  
    // use ri.FindControl("ID") to find controls in the Itemtemplate 
} 

ASPX:

<ItemTemplate> 
    <asp:Panel id="Panel1" runat="server" class="newsBox"> 
     <h1><%# Eval("title") %></h1> 
     add controls here with runat=server, then you can find them from codebehind 
     <p><%# Eval("text") %></p> 
    </asp:Panel> 
</ItemTemplate> 
+0

Как вы получили бы значение «img»? dr.somthing? Или мне нужно иметь его внутри контроллера? –

+0

Если изображение является runat = server и имеет идентификатор 'Image1' (используйте элемент управления ASP.NET Image), вы можете найти его, используя' (Image) ri.FindControl («Image1»); '. –

+0

Проблема в том, что если у меня есть runat = server на моем img или контроллере изображения. Я не могу добавить URL-адрес изображения в ретранслятор с Eval ...? –

Смежные вопросы