C# ASP.Net - DataList 动态更改图像

C# ASP.Net - DataList Changing Images On The Fly

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

更难的部分。基于另一个query/logic我想在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();

获取图像的 code/logic 看起来像这样...

对于在 DataList 中绑定的每个 lblProductName,我将不得不执行以下查询。如果 ProductCount 中 returns 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())";

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

安迪

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

您也需要将它包含在您的 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>