2015-05-28 4 views
0

Я уверен, что это обычная вещь, но поиски ничего не придумали. Возможно, я прошу об этом неправильно, но ...Как получить данные из другой таблицы с помощью ListView?

У меня есть ListView, который отображает данные из таблицы Message (например: MessageList.DataSource = GetAllMessages()). Внутри этой таблицы находится внешний ключ ImageID, который относится к таблице Image. Image имеет столбец Path, который мне нужно прикрепить к моему DataSource, прежде чем я позвоню DataBind() в мой список. Есть ли способ подключить Path к моему списку всех сообщений, убедившись, что все выстроено на основе ImageID?

Другими словами, я показываю список сообщений, содержащих картинки, и мне нужно знать путь к изображению, чтобы я мог его показать. Я хочу установить свойство ImageUrlasp:ImageButton в пределах моего ListView до '<%# DataBinder.Eval(Container.DataItem, "Path") %>', но столбец «Путь» не существует в Messageдо привязки данных. Как убедиться, что функция Eval имеет столбец Path для привязки? Я был бы признателен за любое направление, спасибо за чтение.

EDIT - Вот некоторый код, чтобы лучше объяснить, как все настроено

Вот мой код, чтобы получить все сообщения

public static List<Message> GetAll() 
    { 
     List<Message> messages = new List<Message>(); 

     try 
     { 
      command = GetCommand("SelectAllMessages"); 
      reader = command.ExecuteReader(); 

      while (reader.Read()) 
      { 
       messages.Add(PopulateMessage(reader)); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
     finally 
     { 
      if (conn.State != System.Data.ConnectionState.Closed) 
       conn.Close(); 
     } 

     return messages; 
    } 

И вот я отображения их в моей ListView

MessageList.DataSource = Message.GetAll(); // This is where I need to join 
    MessageList.DataBind(); 

Несомненно, есть способ присоединиться к Message.GetAll() и Image.GetAll() на основе ImageID, и только добавьте столбец Path в Message.GetAll().

ответ

1

Вот мое решение для тех, кто заинтересован:

 // Init 
     List<Message> msgs = CurrentUser.DisplayedMessages; 
     List<HooliganDB.Image> imgs = HooliganDB.Image.GetAll(); 

     if (MessageList.Items.Count < CurrentUser.DisplayedMessages.Count) 
     { 
      // New messages found, rebind data 
      var resultTable = from m in msgs 
           join i in imgs 
           on m.ImageID equals i.ImageID 
           select new 
           { 
            MessageID = m.MessageID, 
            TimeStamp = m.TimeStamp, 
            Text = m.Text, 
            RoomID = m.RoomID, 
            ImageID = m.ImageID, 
            aspUserID = m.aspUserID, 
            Path = i.Path 
           }; 

      MessageList.DataSource = resultTable; 
      MessageList.DataBind(); 
0

Лучшее, что нужно сделать, это включить поле Image.ImageUrl в список, возвращаемый GetAllMessages(). Вы можете легко это сделать, если вы используете SQL-инструкцию или Entity Framework LINQ для извлечения сообщений из БД.

+0

Да, это именно то, что я пытаюсь сделать. Есть ли у вас предпочтительный метод или пример кода, который вы хотите поделиться? – TestWell

+0

Как вы получаете данные из таблицы Messages? Можете ли вы отправить код «GetAllMessages()»? – jomargon

+0

Просто сделал, проверьте выше. Мне не представляется возможным изменить код 'GetAll(), мне просто нужно, чтобы он возвращал сообщения. Я хотел бы добавить столбец 'Path' вне этого кода, чтобы« Сообщения »были отделены от« Images » – TestWell

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