2010-11-11 43 views
3

我有一个SQL Server数据库,里面有一个表格,里面列出了图片的文件名。我打算从表中的数据中为页面上的Image控件分配ImageUrl。我在页面上放置了一个SQLDataSource控件,然后尝试在其中放置一个FormView控件,并在其中添加一个Image控件。但我不明白我可以通过数据绑定将值分配给ImageUrl属性如何使用数据绑定动态分配图像的ImageUrl属性?

回答

8

内任何类型的控制您的使用与返回,你会做一些这样的数据...

<asp:imagebutton id="btnId" runat="server" ImageUrl='<%# Bind("ImgUrl") %>' /> 

播放和试试看......最什么,我要做的就是在datagridviews或中继器...但这并不重要,它的重要性的绑定或评估。

Rod的更多信息。

<asp:SqlDataSource 
     id="SqlDataSource1" 
     runat="server" 
     DataSourceMode="DataReader" 
     ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" 
     SelectCommand="SELECT LastName FROM Employees"> 
    </asp:SqlDataSource> 

    <asp:SqlDataSource 
     id="SqlDataSource2" 
     runat="server" 
     DataSourceMode="DataReader" 
     ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" 
     SelectCommand="SELECT FirstName FROM Employees"> 
    </asp:SqlDataSource> 


    <asp:ListBox 
     id="ListBox1" 
     runat="server" 
     DataTextField="LastName" 
     DataSourceID="SqlDataSource1"> 
    </asp:ListBox> 
    <asp:ListBox 
     id="ListBox2" 
     runat="server" 
     DataTextField="FirstName" 
     DataSourceID="SqlDataSource2"> 
    </asp:ListBox> 

让我知道这至少有助于

+0

而是绑定的,如果它只是用于显示 – 2010-11-11 17:51:48

+0

我倾向于同意你应该使用eval ......不知道到底是什么,他正计划因为它最终所以我figgured ID开始与绑定。 – Patrick 2010-11-11 18:00:05

+0

这看起来像会起作用,但我有一个后续问题。我在页面上有2个SqlDataSource控件。 Bind()方法如何知道使用哪一个? – Rod 2010-11-11 20:36:41

2

做这样的结合的清洁的方式,以及清洁对我来说,是处理在ItemDataBound事件的结合。

所以,你会做这样的事情:

Image imageToBind = e.Item.FindControl("imgTest") as Image; 
image.ImageUrl = (string)DataBinder.Eval(e.Item.DataItem, "ColumnName"); 

我只是觉得这是比实际的标记做它更优雅。

+0

我不认为是更干净的添加和EventHandler并添加两行代码,将控件的id作为字符串处理,并在代码隐藏时使用强制转换。这个解决方案:势在必行。帕特里克的解决方案:更具说明性 – 2010-11-11 17:55:32

+2

主观,然后我猜。每当我看到一个带有Eval/Bind的中继器时,它就会让我感到厌烦。我认为在后面的代码中处理它只是更清洁,更容易查看/理解。 – 2010-11-11 17:58:34

1

.aspx.cs

public string GetImage(string status) 
    { 
     if (status=="Active") 

      return "~/images/green_acti.png"; 

     else 

      return "~/images/red_acti.png"; 

    } 

的.aspx

<asp:TemplateField HeaderText="|| Status ||"> 
      <ItemTemplate> 
       <asp:Image ID="imgGreenAct" ImageUrl='<%# GetImage(Convert.ToString(DataBinder.Eval(Container.DataItem, "truck_status")))%>' AlternateText='<%# Bind("truck_status") %>' runat="server" />        
      </ItemTemplate> 
</asp:TemplateField>