简体   繁体   English

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

[英]Show user defined data from a Queue in a ListView

I want to show the data in a listview, the data stored in a Queue and data type is user defined type(including two string and one int type). 我想在列表视图中显示数据,存储在Queue数据和数据类型是用户定义的类型(包括两个字符串和一个int类型)。

How can i show the data inside after every process of enqueue and dequeue, what could be the command lines and syntax? 在入队和出队的每个过程之后,如何显示内部数据,命令行和语法是什么?

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;

}

Stored data will be user input. 存储的数据将由用户输入。

You can try this code. 您可以尝试此代码。

    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);            
    }

for dequeue 出队

    private void dequeueButton_Click(object sender, EventArgs e)
    {
        if (customers.Count != 0)
        {
            customers.Dequeue();
            customerQueueListView.Items[0].Remove();
        }
    }

Take a look at binding-to-queuestring-ui-never-updates . 看一看绑定到队列字符串ui-never-updates

The proposed implementation is a good way to go (code taken from the linked question): 提议的实现是一个很好的方法(从链接的问题中获取代码):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM