如何将数据源动态分配给列表视图

use*_*524 2 asp.net listview

我在将数据源动态分配给列表视图时遇到问题。

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

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

  1. 在列表视图中使用中继器。但就我而言,我无法将其应用于我的案例,我完全感到困惑

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

       <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>
Run Code Online (Sandbox Code Playgroud)

             <table>

                    <tr>

                        <th>Bonus Description</th> 

                        <th>Bonus Received Date</th>



                    </tr>

                    <tr ID="itemPlaceholder" runat="server" />

                        </table>

        </LayoutTemplate>

</asp:ListView>


    <br />
Run Code Online (Sandbox Code Playgroud)

在后面的代码中,我试着这样写: protected void dataBound(object sender, ListViewItemEventArgs e) { this.DataBindChildren();

    }
Run Code Online (Sandbox Code Playgroud)

它没有给出任何错误,只是不起作用。

  1. 使用数据寻呼机

我不知道如何将它应用于我的案例。

任何帮助表示赞赏。

非常感谢。

awr*_*t18 6

您在服务器端要做的就是更改 DataSource 或 DataSourceID 属性并在 ListView 上调用 DataBind。

在使用 <%# Eval("") %> 语法时,您必须确保要绑定的对象具有在 Eval 中命名的那些属性。因此,当您的属性前面带有类型名和下划线时,您可能会遇到切换数据源的问题。话虽如此。有 2 个选项可以更改数据源。在按钮的单击事件或您使用的任何切换机制中,您可以编写类似的内容。

不在标记中使用数据源:

List<Bonus> bonusList = GetBonuses();
MyListView.DataSource = bonusList;
MyListView.DataBind();
Run Code Online (Sandbox Code Playgroud)

在标记中使用数据源:

//where bonus list would be the id of the datasource in the markup
MyListView.DataSourceID= "BonusList"; 

MyListView.DataBind();
Run Code Online (Sandbox Code Playgroud)