在ListView中显示队列中的用户定义数据

时间:2014-09-25 05:40:51

标签: c# listview

我想在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;

}

存储的数据将是用户输入。

2 个答案:

答案 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();
    }
}