【问题标题】:How do I dynamically assign the ImageUrl property of an image, using data binding?如何使用数据绑定动态分配图像的 ImageUrl 属性?
【发布时间】:2010-11-11 17:37:53
【问题描述】:

我有一个 SQL Server 数据库,其中有一个表,其中列出了图像的文件名。我打算从表中的数据中分配页面上 Image 控件的 ImageUrl。我在页面上放置了一个 SQLDataSource 控件,然后尝试在其中放置一个 FormView 控件,并在其中放置一个 Image 控件。但我不知道如何将值分配给 ImageUrl 属性 via 数据绑定。

【问题讨论】:

    标签: asp.net visual-studio-2010 data-binding


    【解决方案1】:

    在您用来返回数据的任何类型的控件中,您会执行类似...

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

    玩它并尝试一下......我所做的大部分工作都是在 datagridviews 或中继器中......但这并不重要,重要的是绑定或评估。

    罗德的更多信息。

      <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>
    

    如果有帮助请告诉我

    【讨论】:

    • 如果仅用于显示,则应使用 Eval 而不是 Bind
    • 我倾向于同意...不知道他最终的计划是什么,所以我认为 id 从绑定开始。
    • 这看起来可行,但我有一个后续问题。我在页面上有 2 个 SqlDataSource 控件。 Bind() 方法如何知道使用哪一个?
    • @Rod。在您绑定的控件中,您将拥有一个 DataSourceID ... 如果您有多个数据源,每个数据源都需要有不同的 ID。然后控件根据数据源 ID 知道要从哪个数据源绑定
    【解决方案2】:

    进行这种绑定的一种更简洁的方法,至少对我来说更简洁,是在 ItemDataBound 事件中处理绑定。

    所以你会做这样的事情:

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

    我只是发现这样做比在实际标记中更优雅。

    【讨论】:

    • 我认为添加和 EventHandler 并添加两行代码并不干净,这些代码将控件的 id 视为字符串,并在标记中的单个属性足够时在代码隐藏中使用强制转换。这个解决方案:势在必行。 Patrick 的解决方案:更具声明性
    • 我猜是主观的。每当我在各处看到带有 Eval/Bind 的中继器时,都会让我感到厌烦。我认为在后面的代码中处理它更简洁,更容易查看/理解。
    【解决方案3】:

    .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>
    

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 2021-07-23
      • 2019-02-17
      • 2019-10-08
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多