.net 使用列表中的对象填充ListView<&燃气轮机;
我目前正在将控制台应用程序转换为Windows窗体应用程序。 幸运的是,我最初设计的应用程序在将来使用GUI,因此没有太多代码需要更改 我有一个UserCollection类,它本身包含一个User/Member类型的列表(Member是从User派生的) 我想做的是将UserCollection列表中的每个项添加到ListView中,这样我就可以看到每个条目,并垂直显示多个条目列表 我首先尝试通过以下方式实现这一点:.net 使用列表中的对象填充ListView<&燃气轮机;,.net,winforms,listview,.net,Winforms,Listview,我目前正在将控制台应用程序转换为Windows窗体应用程序。 幸运的是,我最初设计的应用程序在将来使用GUI,因此没有太多代码需要更改 我有一个UserCollection类,它本身包含一个User/Member类型的列表(Member是从User派生的) 我想做的是将UserCollection列表中的每个项添加到ListView中,这样我就可以看到每个条目,并垂直显示多个条目列表 我首先尝试通过以下方式实现这一点: private void UpdatePeopleListi
private void UpdatePeopleListings()
{
foreach (User person in newCollection)
{
listViewPeople.Items.Add(person.ToString());
}
}
其中newCollection是从主windows窗体中的UserCollection类创建的新对象
我收到了错误:
foreach statement cannot operate on variables of type 'Collection.UserCollection' because 'Collection.UserCollection' does not contain a public definition for 'GetEnumerator'
然后,我尝试了一个小的变通方法,因此在我的UserCollection中,我创建了以下方法:
public User ReturnUser()
{
foreach (User person in _userCollection)
{
return person;
}
return null;
}
(_userCollection是userCollection.cs中的用户/成员列表)
然后像这样使用它:
private void UpdatePeopleListings()
{
listViewPeople.Items.Add(newCollection.ReturnUser().ToString());
}
尽管这会使用条目填充ListView,但它只填充第一个条目。
如果我要向newCollection添加多个用户/成员,那么它只会重复第一个条目
如何用集合中的所有对象正确填充ListView,以及如何防止它只重复一个对象
UserCollecton.cs
///////////////////////////////////////////////////////////
// UserCollection.cs
// Implementation of the Class UserCollection
// Generated by Enterprise Architect
// Created on: 22-Oct-2009 22:40:30
///////////////////////////////////////////////////////////
#region Using Statements
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
#endregion
namespace Collection
{
//Allows the class to be saved
[Serializable()]
public class UserCollection
{
#region Fields
//Declares a list of type User (Which also holds derived Member objects)
private List<User> _userCollection = new List<User>();
//Holds number of members
int nMember = 0;
//Holds number of users
int nUser = 0;
#endregion
#region Add Operations
/// <summary>
/// Adds a new user
/// </summary>
/// <param name="user"></param>
public void AddUser(User user)
{
//Adds the user given in the operation parameters to the collection
_userCollection.Add(user);
nUser++;
//Sorts the collection using the CompareTo() specified in the User class.
_userCollection.Sort();
//Console.WriteLine used for testing purposes
//Console.WriteLine("added");
}
///<summary>
///Adds a new Member
///</summary>
/// <param name="member"></param>
public void AddMember(Member member)
{
//Adds the member given in the operation parameters to the collection
_userCollection.Add(member);
nMember++;
//Sorts the collection using the CompareTo() specified in the User class.
_userCollection.Sort();
//Console.WriteLine used for testing purposes
//Console.WriteLine("added");
}
#endregion
#region Removal Operations
///<summary>
///Removes a user based on FirstName,LastName and PostCode
///</summary>
/// <param name="person"></param>
public void RemoveUser(User person)
{
//Only search collection for users if there is data in it
if (_userCollection.Count > 0)
{
//Create a temp list for any matched found
List<User> tempList = new List<User>();
foreach (User u in _userCollection)
{
//If the details stored in the collection match the details given in the search
if (u.FName == person.FName && u.LName == person.LName && u.PostCode == person.PostCode)
{
//Add any matches to the temp list
tempList.Add(u);
}
else
{
throw new ArgumentException("User not found");
}
}
//Delete any matches
foreach (User u in tempList)
{
_userCollection.Remove(u);
//Decrement user count
nUser--;
}
}
else
{
throw new AccessViolationException("No data in collection");
}
}
/// <summary>
/// Removes a user using Membership number
/// </summary>
/// <param name="number"></param>
public void RemoveMember(int number)
{
//Create a temp list of type Member
Member temp = new Member();
//Use the temp list to compare types and store all objects of type member
//found in the collection to it.
List<User> Mems = _userCollection.FindAll(delegate(User u)
{ return u.GetType() == temp.GetType(); });
//Delete any matches
foreach (Member m in Mems)
{
if (m.mNum == number)
{
_userCollection.Remove(m);
//Decrement member count
nMember--;
}
else
{
throw new ArgumentException("Member not found");
}
}
}
#endregion
#region Search Operations
///<summary>
///Returns member by Membership number
/// </summary>
///
/// <param name="_mNumber"></param>
public Member FindByMNo(int number)
{
//Create a temp list of type Member
Member temp = new Member();
//Use the temp list to compare types and store all objects of type member
//found in the collection to it.
List<User> Mems = _userCollection.FindAll(delegate(User u)
{ return u.GetType() == temp.GetType(); });
//Return any matches found
foreach (Member i in Mems)
{
if (i.mNum == number)
{
return i;
}
}
throw new ArgumentException("Member not found");
}
///<summary>
///Returns a list of Users matching details given
///</summary>
///
/// <param name="_fName"></param>
/// <param name="_lName"></param>
public List<User> FindByName(User person)
{
//Create a temp list to store any matches
List<User> temp = new List<User>();
//Add matches found to the temp list
foreach (User u in _userCollection)
{
if (u.LName == person.LName)
{
temp.Add(u);
}
}
if (temp.Count > 0)
{
//Return the list that holds any matches
return temp;
}
throw new ArgumentException("User not found");
}
public User ReturnUser()
{
foreach (User person in _userCollection)
{
return person;
}
return null;
}
#endregion
#region Edit Operations
///<summary>
///Edits a members membership expiry
///</summary>
///
/// <param name="member"></param>
public void EditMemStatus(int member, DateTime newDate)
{
//Create a temp list of type Member
Member temp = new Member();
//Use the temp list to compare types and store all objects of type member
//found in the collection to it.
List<User> Mems = _userCollection.FindAll(delegate(User u)
{ return u.GetType() == temp.GetType(); });
//Search for the member that matches the number given in the parameter
foreach (Member m in Mems)
{
if (m.mNum == member)
{
//Replace the match with the new expiry
m.mExp = newDate;
}
else
{
throw new ArgumentException("Date cannot be changed");
}
}
}
#endregion
#region I/O Operations
public bool SaveData()
{
try
{
//Open the stream using the Data.txt file
using (Stream stream = File.Open("Data.txt", FileMode.Create))
{
//Create a new formatter
BinaryFormatter bin = new BinaryFormatter();
//Copy data in collection to the file specified earlier
bin.Serialize(stream, _userCollection);
bin.Serialize(stream, nMember);
bin.Serialize(stream, nUser);
//Close stream to release any resources used
stream.Close();
}
return true;
}
catch (IOException ex)
{
throw new ArgumentException(ex.ToString());
}
}
public bool LoadData()
{
//Check if file exsists, otherwise skip
if (File.Exists("Data.txt"))
{
try
{
using (Stream stream = File.Open("Data.txt", FileMode.Open))
{
BinaryFormatter bin = new BinaryFormatter();
//Copy data back into collection fields
_userCollection = (List<User>)bin.Deserialize(stream);
nMember = (int)bin.Deserialize(stream);
nUser = (int)bin.Deserialize(stream);
stream.Close();
//Sort data to ensure it is ordered correctly after being loaded
_userCollection.Sort();
return true;
}
}
catch (IOException ex)
{
throw new ArgumentException(ex.ToString());
}
}
else
{
//Console.WriteLine present for testing purposes
Console.WriteLine("\nLoad failed, Data.txt not found");
return false;
}
}
#endregion
#region Properties
//Gets amount of Members in collection
public int GetNMember
{
get
{
return nMember;
}
}
//Gets amount of Users in collectioj
public int GetNUser
{
get
{
return nUser;
}
}
#endregion
}//end UserCollection
}
///////////////////////////////////////////////////////////
//UserCollection.cs
//类UserCollection的实现
//由企业架构师生成
//创建日期:22-Oct-2009 22:40:30
///////////////////////////////////////////////////////////
#区域使用语句
使用制度;
使用System.Collections.Generic;
使用System.Runtime.Serialization;
使用System.Runtime.Serialization.Formatters.Binary;
使用System.IO;
#端区
命名空间集合
{
//允许保存类
[可序列化()]
公共类用户集合
{
#区域字段
//声明类型User的列表(其中还包含派生成员对象)
私有列表_userCollection=新列表();
//持有会员人数
int n成员=0;
//保存用户数
int=0;
#端区
#区域添加操作
///
///添加新用户
///
///
public void AddUser(用户)
{
//将操作参数中给定的用户添加到集合中
_userCollection.Add(用户);
用户++;
//使用用户类中指定的CompareTo()对集合进行排序。
_userCollection.Sort();
//Console.WriteLine用于测试目的
//控制台。写入线(“添加”);
}
///
///添加新成员
///
///
公共无效添加成员(成员)
{
//将操作参数中给定的成员添加到集合中
_userCollection.Add(成员);
nMember++;
//使用用户类中指定的CompareTo()对集合进行排序。
_userCollection.Sort();
//Console.WriteLine用于测试目的
//控制台。写入线(“添加”);
}
#端区
#区域删除操作
///
///根据姓氏、姓氏和邮政编码删除用户
///
///
public void RemoveUser(用户个人)
{
//仅当集合中有数据时才搜索用户
如果(_userCollection.Count>0)
{
//为找到的任何匹配项创建临时列表
列表模板列表=新建列表();
foreach(用户u在_userCollection中)
{
//如果集合中存储的详细信息与搜索中提供的详细信息匹配
如果(u.FName==person.FName&&u.LName==person.LName&&u.PostCode==person.PostCode)
{
//将任何匹配项添加到临时列表中
圣殿骑士。加上(u);
}
其他的
{
抛出新ArgumentException(“未找到用户”);
}
}
//删除任何匹配项
foreach(templast中的用户u)
{
_userCollection.Remove(u);
//递减用户计数
用户--;
}
}
其他的
{
抛出新的AccessViolationException(“收集中没有数据”);
}
}
///
///使用成员身份号码删除用户
///
///
公共无效删除成员(整数)
{
//创建成员类型的临时列表
成员临时=新成员();
//使用临时列表比较类型并存储所有成员类型的对象
//在集合中找到它。
List Mems=\u userCollection.FindAll(委托(用户u)
{return u.GetType()==temp.GetType();});
//删除任何匹配项
foreach(Mems成员m)
{
如果(m.mNum==数字)
{
_userCollection.Remove(m);
//递减成员计数
n成员--;
}
其他的
{
抛出新ArgumentException(“未找到成员”);
}
}
}
#端区
#区域搜索操作
///
///按成员编号返回成员
///
///
///
公共成员FindByMNo(整数)
{
//创建成员类型的临时列表
成员临时=新成员();
//使用临时列表比较类型并存储所有对象
ListViewItem item = new ListViewItem();
item.Text = "bar";
item.SubItems.Add ("foo");
item.SubItems.Add ("foo2");
myListView.Items.Add (item);