如何使用ListView从另一个表中获取数据

本文关键字:获取 数据 另一个 何使用 ListView | 更新日期: 2023-09-27 17:51:04

我相信这是一件很常见的事情,但是搜索没有找到任何东西。也许我问错了,但是……

我有一个ListView,显示来自Message表的数据(例如:MessageList.DataSource = GetAllMessages())。在这个表中是属于表Image的外键ImageIDImage有一个Path列,我需要在我调用DataBind()到我的列表之前附加到我的DataSource。是否有办法将Path附加到我的所有消息列表,同时确保一切都基于ImageID排列?

换句话说,我正在显示一个包含图片的消息列表,我需要知道图像的路径,以便我可以显示它。我想将ListView中的asp:ImageButtonImageUrl属性设置为'<%# DataBinder.Eval(Container.DataItem, "Path") %>',但在数据绑定之前,Message 中不存在"Path"列。我如何确保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();

当然有办法在ImageID的基础上加入Message.GetAll()Image.GetAll(),只将Path列添加到Message.GetAll()

如何使用ListView从另一个表中获取数据

下面是我的解决方案:

        // 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();

最好的方法是将Image.ImageUrl字段包含在GetAllMessages()返回的列表中。你可以很容易地做到这一点,无论你是使用SQL语句或实体框架LINQ从数据库获取消息。