2015-11-19 3 views
3

У меня есть простой DataList, который получает текстовые данные из одного поля в базе данных и отображает его по горизонтали на ярлыке lblProductName. Это отлично работает. В моей базе данных у меня 4 записи, и она отображает 1 строку с 4 столбцами данных в таблице в DataList. Отлично.C# ASP.Net - DataList Изменение изображений на лету

Более твердая часть. На основе другого запроса/логики я хочу отобразить изображение под меткой lblProductName в DataList; либо 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(); 

код/​​логика, чтобы получить изображение будет выглядеть примерно так ...

Как-то для каждого lblProductName, который получает связанный в DataList я должен был бы выполнить следующий запрос. Если запрос ниже возвращает 0 в ProductCount, я бы установил 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

Привет Кирк, к сожалению, как база данных настроена есть еще одна таблица TaktBoard, что я должен проверить, есть ли какие-либо сохраненные записи, которые имеют PRODUCTID для названия продукта Я ищу. Поэтому я должен выполнить вторичный запрос, чтобы проверить это. – Andy

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

Это будет потрясающе, если это сработает. Я добавил «%>», и изображение теперь выглядит так. ' Andy

+0

Я обновил код для изображения, может попробовать '~ Images', если это от вашего корня приложения – Kirk

+0

Каковы ошибки – Kirk

Смежные вопросы