在 ListView 的 ItemTemplate 中动态插入非数据库值
Dynamically insert non-database value in ItemTemplate for ListView
我有一个从数据库中填充的列表视图。我还有一个动态计算的值(用户输入的邮政编码与所有数据库邮政编码的相对距离)
我尝试添加一个标签,我可以通过 ItemDataBound
事件在 ListView
的 ItemTemplate
中成功访问该标签:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
if (CategoryList.SelectedIndex == 5)
{
var lb = e.Item.FindControl("lbPostcodeDistance") as Label;
if (!string.IsNullOrEmpty(tbPostcode.Text))
{
lb.Text = "Distance from: " + tbPostcode.Text;
lb.Visible = true;
}
}
}
}
以上工作正常,但是,我需要向 lb.Text
动态添加一个实际值。
这个值是在我的public IEnumerable<...> ListView1_GetData()
中计算出来的,下面是一段代码:
var inRangeWalks = new List<InRangeWalks>();
foreach (var walk in grabAllWalks)
{
double dis = //calculation here
if (dis <= radius)
{
inRangeWalks.Add(new InRangeWalks(dis, walk));
}
}
inRangeWalks.Sort((x, y) => x.DistanceFromPostcode.CompareTo(y.DistanceFromPostcode));
}
return inRangeWalks.Select(x => x.Walk); //ListView only wants walks, thus returned ordered Walks.
上面的代码完美运行,但我需要将 dis
值添加到 ItemTemplate
中的每个 item
。我一直在尝试使用 ItemDataBound
事件来做到这一点,但我不确定这是否正确,甚至可能。
这是我的ItemTemplate
:
<ItemTemplate>
<div class="row">
...
<h6><b>Location:</b> <%# Item.Location%>, <%# Item.Postcode%></h6>
<asp:Label ID="lbPostcodeDistance" runat="server" Text="Label" Visible="false"></asp:Label>
</div>
</ItemTemplate>
我还能如何显示额外的动态计算值,即标签在 ItemTemplate
中的确切位置?
好吧,我实际上最终在评论中使用了 Rahul 的建议,并让我的 ListView
使用了我的自定义数据源。
开始时有点痛苦 运行 但现在效果很好!
如果有人想实现自己的数据结构,请记住在 ASPX
页面上将 ItemType
更改为新结构,即 ItemType="MyProject.Folder.ClassName"
。然后您可以使用模型绑定访问 属性,例如:text=<%# Item.MyObject.Property %>
我有一个从数据库中填充的列表视图。我还有一个动态计算的值(用户输入的邮政编码与所有数据库邮政编码的相对距离)
我尝试添加一个标签,我可以通过 ItemDataBound
事件在 ListView
的 ItemTemplate
中成功访问该标签:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
if (CategoryList.SelectedIndex == 5)
{
var lb = e.Item.FindControl("lbPostcodeDistance") as Label;
if (!string.IsNullOrEmpty(tbPostcode.Text))
{
lb.Text = "Distance from: " + tbPostcode.Text;
lb.Visible = true;
}
}
}
}
以上工作正常,但是,我需要向 lb.Text
动态添加一个实际值。
这个值是在我的public IEnumerable<...> ListView1_GetData()
中计算出来的,下面是一段代码:
var inRangeWalks = new List<InRangeWalks>();
foreach (var walk in grabAllWalks)
{
double dis = //calculation here
if (dis <= radius)
{
inRangeWalks.Add(new InRangeWalks(dis, walk));
}
}
inRangeWalks.Sort((x, y) => x.DistanceFromPostcode.CompareTo(y.DistanceFromPostcode));
}
return inRangeWalks.Select(x => x.Walk); //ListView only wants walks, thus returned ordered Walks.
上面的代码完美运行,但我需要将 dis
值添加到 ItemTemplate
中的每个 item
。我一直在尝试使用 ItemDataBound
事件来做到这一点,但我不确定这是否正确,甚至可能。
这是我的ItemTemplate
:
<ItemTemplate>
<div class="row">
...
<h6><b>Location:</b> <%# Item.Location%>, <%# Item.Postcode%></h6>
<asp:Label ID="lbPostcodeDistance" runat="server" Text="Label" Visible="false"></asp:Label>
</div>
</ItemTemplate>
我还能如何显示额外的动态计算值,即标签在 ItemTemplate
中的确切位置?
好吧,我实际上最终在评论中使用了 Rahul 的建议,并让我的 ListView
使用了我的自定义数据源。
开始时有点痛苦 运行 但现在效果很好!
如果有人想实现自己的数据结构,请记住在 ASPX
页面上将 ItemType
更改为新结构,即 ItemType="MyProject.Folder.ClassName"
。然后您可以使用模型绑定访问 属性,例如:text=<%# Item.MyObject.Property %>