【问题标题】:Show user defined data from a Queue in a ListView在 ListView 中显示来自队列的用户定义数据
【发布时间】:2014-09-25 05:40:50
【问题描述】:

我想在列表视图中显示数据,数据存储在Queue 中,数据类型是用户定义的类型(包括两个字符串和一个整数类型)。

如何在每个入队和出队过程之后显示里面的数据,命令行和语法是什么?

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;

}

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

【问题讨论】:

标签: c# listview


【解决方案1】:

你可以试试这个代码。

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

【讨论】:

  • 您能否详细说明您的代码为何以及如何工作并解决问题?这样,您的回答将对未来的访问者更有帮助。
  • 如果用户有两个按钮用于入队和出队,他/她可以按照我的代码。我希望它能正常工作
  • 可能是这样,但在问题中从未提及按钮,因此(至少对我而言)并不明显,为什么这是一个比另一个更好的答案。
  • 我提到了,队列数据如何添加到列表视图中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多