如何使用ListView从另一个表中获取数据
本文关键字:获取 数据 另一个 何使用 ListView | 更新日期: 2023-09-27 17:51:04
我相信这是一件很常见的事情,但是搜索没有找到任何东西。也许我问错了,但是……
我有一个ListView
,显示来自Message
表的数据(例如:MessageList.DataSource = GetAllMessages()
)。在这个表中是属于表Image
的外键ImageID
。Image
有一个Path
列,我需要在我调用DataBind()
到我的列表之前附加到我的DataSource
。是否有办法将Path
附加到我的所有消息列表,同时确保一切都基于ImageID
排列?
换句话说,我正在显示一个包含图片的消息列表,我需要知道图像的路径,以便我可以显示它。我想将ListView
中的asp:ImageButton
的ImageUrl
属性设置为'<%# 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()
。
下面是我的解决方案:
// 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从数据库获取消息。