如何动态地将数据源分配给listview

时间:2009-05-03 08:27:31

标签: asp.net listview

我在向listview动态分配数据源方面遇到了问题。

例如我有receivedBonuses(Bonus),receivedLeaves(Leave)列表,我希望listview根据用户点击的链接按钮显示这些列表项。

研究互联网和stackoverflow.com我找到了3个解决方案:

  1. 在listview中使用repeater。但在我的情况下,我无法将它应用于我的案例而且我完全糊涂了

  2. 使用嵌套列表视图。我试着这样做:

  3.        <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();

    它没有给出任何错误它只是没有用。

    1. 使用数据寻呼机
    2. 我不知道如何将它应用到我的案例中。

      感谢任何帮助。

      非常感谢。

2 个答案:

答案 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?