Winforms обязательные вопросы, связанные с структурами - PullRequest
2 голосов
/ 17 июня 2011

Привет, кодеры. У меня есть еще один вопрос, связанный с привязкой данных в winforms. Я настроил тестовые приложения, в которых у меня есть список привязок, состоящий из структур с именем CustomerInfo. Я привязал элемент управления списком к этому списку и развернул поток, чтобы добавить элементы CustomerInfo в список привязок.

namespace dataBindingSample {

public partial class Form1 : Form {

    public BindingList<CustomerInfo> stringList = new BindingList<CustomerInfo>();
    public Thread testThread;

    public Form1() {

        InitializeComponent();

        stringList.AllowNew = true;
        stringList.RaiseListChangedEvents = true;
        listBox1.DataSource = stringList;

        testThread = new Thread(new ThreadStart(hh_net_retask_request_func));
        testThread.Priority = ThreadPriority.Normal;

    }

    private void hh_net_retask_request_func() {

        int counter = 1;
        while (true) {


            CustomerInfo cust = new CustomerInfo();
            cust.Name = "Customer "+ counter.ToString();

            this.Invoke((MethodInvoker)delegate {

                stringList.Add(cust);

            });

            counter++;
            Thread.Sleep(1000);

        }

    }

    private void Form1_Load(object sender, EventArgs e) {
        testThread.Start();
    }

}

public struct CustomerInfo {

    public string Name {

        set {

            name = value;
        }

        get {
            return name;
        }

    }

    private string name;
  }
}

То, что я вижу в списке, это имя структуры dataBindingSample.CustomerInfo, в отличие от свойства структуры. У меня сложилось впечатление, что несложное связывание заняло первое доступное свойство.

Пожалуйста, объясни мне, что я делаю неправильно.

Спасибо

1 Ответ

5 голосов
/ 17 июня 2011

Вам нужно будет либо добавить переопределение ToString() к вашему классу CustomerInfo, которое возвращает то, что вы хотите отобразить в вашем списке, либо установить listBox1.DisplayMemer = "Name" перед установкой DataSource.

...