手动将项插入ListView控件

本文关键字:ListView 控件 插入 | 更新日期: 2023-09-27 18:04:02

我搜索过S/O和谷歌,但我不明白(大多数搜索结果都是从数据源填充Listview(。我想根据用户选择手动将项目添加到列表视图控件中。

ListView listView1 = new ListView();
listView1.Items.Add(lstAuthors[i]);  

我得到一个错误:
与"System"匹配的最佳重载方法。集合。通用的I集合。Add(System.Web.UI.WebControls.ListViewDataItem('具有一些无效参数

错误的原因是什么?

手动将项插入ListView控件

此错误仅表示lstAuthors[i]不是System.Web.UI.WebControls.ListViewDataItem(这是ListView.Items.Add函数的唯一有效参数。

为了按照现在的方式完成此操作,您需要初始化ListViewDataItem,并为dataIndex参数使用伪值(因为您没有底层索引数据源(:

ListViewDataItem newItem = new ListViewDataItem(dataIndex, displayIndex);

老实说,这似乎不是使用ListView控件的正确方式。也许你可以告诉我们你正在努力实现什么,我们可以用另一种方法来帮助我们。


这里有一个非常精简的基本方法来做你想做的事情。你基本上维护一个通用的List<T>作为你的数据源,并将绑定到你的ListView。通过这种方式,您可以处理维护ListView内容的所有细节,但您仍然可以使用数据绑定的内置功能。

基本标记(ListView的ItemTemplate中有一个项目,一个用于从中选择项目的DropDownList,以及一个用于将这些项目添加到ListView的按钮(:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ListView ID="ListView1" runat="server">
        <ItemTemplate>
            <div>
                <asp:Label ID="AuthorNameLbl" runat="server" Text='<%# Eval("AuthorName") %>'></asp:Label>
            </div>
        </ItemTemplate>
    </asp:ListView>
    <br />
    <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem>Stephen King</asp:ListItem>
        <asp:ListItem>Mary Shelley</asp:ListItem>
        <asp:ListItem>Dean Koontz</asp:ListItem>
    </asp:DropDownList>
    <br />
    <br />
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</asp:Content>

背后的代码:

// Honestly, this string  just helps me avoid typos when 
// referencing the session variable
string authorKey = "authors";
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // If the session variable is empty, initialize an 
        // empty list as the datasource
        if (Session[authorKey] == null)
        {
            Session[authorKey] = new List<Author>();
        }
        BindList();
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    // Grab the current list from the session and add the 
    // currently selected DropDown item to it.
    List<Author> authors = (List<Author>)Session[authorKey];
    authors.Add(new Author(DropDownList1.SelectedValue));
    BindList();
}
private void BindList()
{
    ListView1.DataSource = (List<Author>)Session[authorKey];
    ListView1.DataBind();
}
// Basic author object, used for databinding
private class Author
{
    public String AuthorName { get; set; }
    public Author(string name)
    {
        AuthorName = name;
    }
}