我确信这是一件很常见的事情,但搜索没有任何结果。也许我说错了但是......
我有ListView
显示来自Message
表的数据(例如:MessageList.DataSource = GetAllMessages()
)。此表中包含属于表ImageID
的外键Image
。在我将Image
发送到我的列表之前,Path
有一个DataSource
列需要附加到我的DataBind()
。有没有办法将Path
附加到我的所有邮件列表中,同时确保所有邮件都基于ImageID
排列?
换句话说,我正在显示包含图片的消息列表,我需要知道图像的路径,以便我可以显示它。我想将ImageUrl
中asp: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
。
答案 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获取消息,都可以轻松完成此操作。