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

时间:2015-05-28 01:27:26

标签: c# asp.net listview

我确信这是一件很常见的事情,但搜索没有任何结果。也许我说错了但是......

我有ListView显示来自Message表的数据(例如:MessageList.DataSource = GetAllMessages())。此表中包含属于表ImageID的外键Image。在我将Image发送到我的列表之前,Path有一个DataSource列需要附加到我的DataBind()。有没有办法将Path附加到我的所有邮件列表中,同时确保所有邮件都基于ImageID排列?

换句话说,我正在显示包含图片的消息列表,我需要知道图像的路径,以便我可以显示它。我想将ImageUrlasp:ImageButton的{​​{1}}属性设置为ListView,但<{1}} 中没有“路径”列。 / em>数据绑定。如何确保'<%# DataBinder.Eval(Container.DataItem, "Path") %>'函数有Message列绑定到?我很感激任何方向,感谢阅读。

编辑 - 这里有一些代码可以帮助您更好地解释所有内容的设置

这是获取所有消息的代码

Eval

在这里,我在ListView中显示它们

Path

肯定有一种方法可以根据 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; } 加入 MessageList.DataSource = Message.GetAll(); // This is where I need to join MessageList.DataBind(); Message.GetAll(),并且只将Image.GetAll()列添加到ImageID

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

最好的办法是在Image.ImageUrl返回的列表中包含GetAllMessages()字段。无论您是使用SQL语句还是实体框架LINQ从DB获取消息,都可以轻松完成此操作。