手动将项插入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('具有一些无效参数
错误的原因是什么?
此错误仅表示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;
}
}