我想在listview中显示数据,存储在Queue
中的数据和数据类型是用户定义的类型(包括两个字符串和一个int类型)。
如何在排队和出队的每个进程后显示内部数据,命令行和语法可能是什么?
Queue<Customer> aCustomerQueue =new Queue<Customer>();// its the queue
class Customer// its the user defined type variable class
{
public string name;
public string complain;
public int serialNo;
}
存储的数据将是用户输入。
答案 0 :(得分:2)
您可以尝试使用此代码。
int count;
Queue<Customer> customers = new Queue<Customer>();
ListViewItem item;
private void enqueueButton_Click(object sender, EventArgs e)
{
Customer customer = new Customer();
count++;
customer.serialNo += count;
customer.name = nameTextBox.Text;
customer.complain = complainTextBox.Text;
customers.Enqueue(customer);
foreach (Customer custm in customers)
{
item = new ListViewItem(custm.serialNo.ToString());
item.SubItems.Add(custm.name);
item.SubItems.Add(custm.complain);
}
customerQueueListView.Items.Add(item);
}
出队
private void dequeueButton_Click(object sender, EventArgs e)
{
if (customers.Count != 0)
{
customers.Dequeue();
customerQueueListView.Items[0].Remove();
}
}
答案 1 :(得分:0)
看看binding-to-queuestring-ui-never-updates。
建议的实施是一个很好的方法(代码取自链接的问题):
public class ObservableQueue<T> : INotifyCollectionChanged, IEnumerable<T>
{
public event NotifyCollectionChangedEventHandler CollectionChanged;
private readonly Queue<T> queue = new Queue<T>();
public void Enqueue(T item)
{
queue.Enqueue(item);
if (CollectionChanged != null)
CollectionChanged(this,
new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, item));
}
public T Dequeue()
{
var item = queue.Dequeue();
if (CollectionChanged != null)
CollectionChanged(this,
new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Remove, item));
return item;
}
public IEnumerator<T> GetEnumerator()
{
return queue.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}