我在向listview动态分配数据源方面遇到了问题。
例如我有receivedBonuses(Bonus),receivedLeaves(Leave)列表,我希望listview根据用户点击的链接按钮显示这些列表项。
研究互联网和stackoverflow.com我找到了3个解决方案:
在listview中使用repeater。但在我的情况下,我无法将它应用于我的案例而且我完全糊涂了
使用嵌套列表视图。我试着这样做:
<asp:ListView ID = "bonuses" runat="server" DataSource ='<%# Eval("received_bonuses") %>' >
<ItemTemplate>
<tr>
<td><%# Eval("bonus_desc")%></td>
<td><%# Eval("bonus_type")%></td>
</tr>
</ItemTemplate>
<LayoutTemplate>
<table>
<tr>
<th>Bonus Description</th>
<th>Bonus Received Date</th>
</tr>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<table>
<tr>
<th>Bonus Description</th>
<th>Bonus Received Date</th>
</tr>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
</asp:ListView>
<br />
<asp:ListView ID = "bonuses" runat="server" DataSource ='<%# Eval("received_bonuses") %>' >
<ItemTemplate>
<tr>
<td><%# Eval("bonus_desc")%></td>
<td><%# Eval("bonus_type")%></td>
</tr>
</ItemTemplate>
<LayoutTemplate>
<table>
<tr>
<th>Bonus Description</th>
<th>Bonus Received Date</th>
</tr>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
在后面的代码我尝试这样写:
<table>
<tr>
<th>Bonus Description</th>
<th>Bonus Received Date</th>
</tr>
<tr ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
</asp:ListView>
<br />
protected void dataBound(object sender, ListViewItemEventArgs e)
{
this.DataBindChildren();
它没有给出任何错误它只是没有用。
我不知道如何将它应用到我的案例中。
感谢任何帮助。
非常感谢。
答案 0 :(得分:4)
您在服务器端所要做的就是更改DataSource或DataSourceID属性并在ListView上调用DataBind。
使用&lt;%#Eval(“”)%&gt;时必须确保您绑定的对象具有在Eval中命名的那些属性的语法。因此,当您的属性前缀为typename和下划线时,您可能会遇到切换数据源的问题。 话虽如此。您有2个选项可以更改数据源。在按钮的单击事件或您正在使用的任何切换机制中,您可以编写类似的内容。
在标记中不使用DataSource:
List<Bonus> bonusList = GetBonuses();
MyListView.DataSource = bonusList;
MyListView.DataBind();
在标记中使用DataSource:
//where bonus list would be the id of the datasource in the markup
MyListView.DataSourceID= "BonusList";
MyListView.DataBind();
答案 1 :(得分:0)
您需要动态执行此操作吗?如果您只有“bonuse”和“离开”,您可以创建两个列表视图,然后根据单击的链接按钮显示逻辑到visible = true / false listview?