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>

我正在考虑从后面的代码中获取数据,然后测试并将输出发送回文字,但不知道如何从那里访问转发器数据?

4

3 回答 3

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..
            }
       }
于 2012-08-28T08:13:32.707 回答
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)%>

编辑......虽然对于更复杂的视觉变化,我会推荐ItemDataBound蒂姆和乌斯曼(和尼基尔)提供的解决方案

于 2012-08-28T08:10:51.717 回答
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>
于 2012-08-28T08:12:18.540 回答