1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class testobj { private string prop1; private string prop2;
public testobj(string str1, string str2) { this.prop1=str1; this.prop2=str2; }
public string TestProp { get { return prop2; } } }
|
Έστω ότι έχω την παραπάνω κλάση.
Αν κάνω το εξής:
ArrayList temp1 = new ArrayList();
temp1.Add(new testobj("aa","11"));
temp1.Add(new testobj("bb","22"));
temp1.Add(new testobj("cc","33"));
listBox1.DataSource = temp1;
listBox1.DisplayMember = "TestProp";
τότε δουλεύει κανονικά και στο ListBox εμφανίζονται οι τιμές 11, 22 και 33.
Αν αντί για ArrayList χρησιμοποιήσω Array:
testobj[] temp1 = new testobj[4];
temp1[0] = new testobj("aa", "11");
temp1[1] = new testobj("bb", "22");
temp1[2] = new testobj("cc", "33");
listBox1.DataSource = temp1;
listBox1.DisplayMember = "TestProp";
τότε οι τιμές που εμφανίζονται στο Listbox είναι το όνομα της κλάσης (ConsoleApp1.testobj). Αν κάνω overload το toString() τότε θα εμφανίστει στο Listbox το αποτέλεσμα του toString() αδιαφορώντας για την τιμή του DisplayMember.
Τι κάνω λάθος;
Στην περίπτωση με το Array δοκίμασα να βάλω ένα breakpoint ακριβώς μετά το listBox1.DisplayMember = "TestProp"; και παρατήρησα στον debugger ότι η τιμή του DisplayMember δεν είχε αλλαχτεί (παρέμενε "").
Φχαριστώ για τον χρόνο σας :-)