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>
我有一个简单的 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>