【问题标题】:C# ASP.Net - DataList Changing Images On The FlyC# ASP.Net - 动态更改图像的 DataList
【发布时间】:2015-11-19 14:32:56
【问题描述】:

我有一个简单的 DataList,它从数据库的一个字段中获取文本数据,并将其水平显示在 lblProductName 标签中。这很好用。在我的数据库中,我有 4 条记录,它在 DataList 的表中显示 1 行和 4 列数据。完美的。

较难的部分。基于另一个查询/逻辑,我想在 DataList 的 lblProductName 标签下显示图像; switchon.jpg 或 switchoff.jpg。这我不知道该怎么做,因为我将 DataList 与原始查询绑定到数据库。

这是我的数据列表。

    <asp:DataList ID="dlstProductDataList" runat="server" RepeatColumns = "5" CellPadding = "10" HorizontalAlign ="Center" RepeatDirection="Horizontal" Width="100%">
        <ItemTemplate>
            <div class="ProductLinks">
                <asp:Label ID="lblProductName" runat="server" Text='<%# Eval("ProductName") %>' /><br />
                <asp:Image ID="imgProductStatus" runat="server"></asp:Image>
            </div>
        </ItemTemplate>
    </asp:DataList>

这是我将数据加载到 DataList 中的代码。

    var cnnString = ConfigurationManager.ConnectionStrings["TaktBoardsConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(cnnString);
    SqlCommand cmd = new SqlCommand();

    string sql = "SELECT [ProductID], [ProductName] FROM [Product] WHERE [ProductID] <> 1 ORDER BY [ProductID]";
    cmd.CommandText = sql;
    cmd.CommandType = CommandType.Text;
    cmd.Connection = conn;

    cmd.Connection.Open();
    dlstProductDataList.DataSource = cmd.ExecuteReader();
    dlstProductDataList.DataBind();

    cmd.Connection.Close();
    cmd.Connection.Dispose();

获取图像的代码/逻辑如下所示...

对于绑定在 DataList 中的每个 lblProductName,我必须以某种方式执行以下查询。如果下面的查询在 ProductCount 中返回 0,那么我会将 imgProductStatus 设置为 switchoff.jpg。如果它 > 0,那么它将被设置为 switchon.jpg。对于每个 lblProductName,我都知道 ProductID(根据上面的第一个查询)。

    sql = "SELECT COUNT([ProductID]) AS ProductCount FROM TaktBoard WHERE [ProductID] = ??????? AND CONVERT (date, [BoardDate]) = CONVERT (date, GETDATE())";

如果有人能引导我朝着正确的方向前进,将不胜感激!

安迪

【问题讨论】:

  • 嗨柯克,不幸的是,数据库的设置方式还有另一个表 TaktBoard,我必须检查是否有任何已保存的记录具有我正在搜索的产品名称的 productID .所以我必须做一个辅助查询来检查。
  • 最好使用您需要的所有信息创建一个查询。因此,创建一个带有子查询的查询(或使用绑定)来获取您需要的所有数据。然后更改模板元素。总结一下:在第一次查询时带上您需要的所有数据。

标签: c# asp.net image datalist


【解决方案1】:

您可以调整查询以包含计数。

您还需要将其包含在 SQL 中,有几种方法可以做到这一点,例如使用连接,但如果没有看到完整的架构,您可能会更幸运地使用子查询

string sql = "SELECT [ProductID], [ProductName], (select COUNT([ProductID]) FROM TaktBoard tb WHERE tb.[ProductID] = [Product].[ProductID] AND CONVERT (date, [BoardDate]) = CONVERT (date, GETDATE())) as [ProductCount] FROM [Product] WHERE [ProductID] <> 1 ORDER BY [ProductID]";

格式有点多看看

SELECT [ProductID], [ProductName],
(
    select COUNT([ProductID])
    FROM TaktBoard tb
    WHERE tb.[ProductID] = [Product].[ProductID]
    AND CONVERT (date, [BoardDate]) = CONVERT (date, GETDATE())
) as [ProductCount]

FROM [Product]
WHERE [ProductID] <> 1 
ORDER BY [ProductID]

然后在你的图片中使用它。

<asp:Image ID="imgProductStatus" runat="server" ImageUrl='<%# (Convert.ToInt32(Eval("ProductCount")) == 0) ? "~/Images/switchoff.jpg" : "~/Images/switchon.jpg" %>'></asp:Image>

【讨论】:

  • 如果它有效,那就太棒了。我添加了“%>”,图像现在看起来像这样。 &lt;asp:Image ID="imgProductStatus" runat="server" ImageUrl='&lt;%# (Convert.ToInt32(Eval("ProductCount")) = 0) ? "Images/switchoff.jpg" : "Images/switchon.jpg"%&gt;'&gt;&lt;/asp:Image&gt; ... 我得到了错误
  • 我已经更新了图片的代码,如果它来自您的应用程序根目录,可以试试~Images
  • 有效!!!柯克,谢谢。我不可能靠自己解决这个问题。你是摇滚明星。对不起..错误是在您更新图像代码之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多