我有一个简单的DataList,它从数据库中的一个字段获取文本数据,并在lblProductName标签中水平显示。这非常有效。在我的数据库中,我有4条记录,它在DataList的表中显示1行,包含4列数据。完善。
更难的部分。基于另一个查询/逻辑,我想在DataList中的lblProductName标签下显示一个图像;要么是switchon.jpg,要么是switchoff.jpg。我不知道怎么做,因为我将DataList与原始查询绑定到数据库。
这是我的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())";
如果有人能指引我朝着正确的方向前进,我们将非常感激!!
安迪
答案 0 :(得分:2)
您可以调整查询以包含计数。
你也需要在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>