दिलचस्प पोस्ट
एएसपी.नेट एमवीसी में प्रवेश-नियंत्रण-अनुमति-उत्पत्ति की स्थापना करना – सरलतम संभव विधि सभी प्रकारों पर लिखे गए कामों पर विशेषताओं का उपयोग करना, लेकिन “ अंतर नहीं; क्यूं कर? क्या मैं आराम के बारे में नहीं समझ रहा हूँ? निर्देशिका में फ़ाइलों से आयात मॉड्यूल जेएसपी में पीडीएफ प्रदर्शित एंड्रॉइड स्टूडियो को build.gradle के बाहरी परियोजना को जोड़ना जावा – अपने घटकों के साथ जेपीएनएल खींचें और ड्रॉप कैसे करें गिट SSH त्रुटि: "मेजबान से कनेक्ट करें: खराब फ़ाइल संख्या" targetContentOffsetForProposedContentOffset: बिना subclassing UCollectionViewFlowLayout के साथ ScrollingVelocity Asp.net में कैश लॉक करने का सबसे अच्छा तरीका क्या है? UIImagePickerController स्क्रीन को भर नहीं करता है दृश्य स्टूडियो में खोलने के बाद कंसोल एप्लिकेशन तुरन्त बंद हो जाता है jquery यूआई संवाद: शीर्षक पट्टी के बिना कैसे आरंभ करें? सी # से SQLite डेटाबेस से कनेक्ट करने और उपयोग करने का सबसे अच्छा तरीका क्या है एंड्रॉइड – फेसबुक, स्पिटेक्ट और गूगल + जैसी स्लाइड मेन्यू कैसे बनाएं

सी # WinForms में एक ListBox के DataSource को रीफ्रेश कैसे करें

प्रपत्र में एक कम्बोबोक्स और एक लिस्टबॉक्स है जब "जोड़ें" बटन क्लिक किया जाता है, तो मैं कॉम्बो बॉक्स से लिस्ट बॉक्स में चयनित आइटम जोड़ना चाहता हूं।

public partial class MyForm:Form { List<MyData> data = new List<MyData>(); private void ShowData() { listBox1.DataSource = data; listBox1.DisplayMember = "Name"; listBox1.ValueMember = "Id"; } private void buttonAddData_Click(object sender, EventArgs e) { var selection = (MyData)comboBox1.SelectedItem; data.Add(selection); ShowData(); } } 

इस उदाहरण के साथ, चयनित आइटम को सूचीबॉक्स के अंदर नए चयन के साथ बदल दिया गया है। मुझे सूची में आइटम जोड़ने की आवश्यकता है I

मेरे कोड में क्या गलत है?

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "सी # WinForms में एक ListBox के DataSource को रीफ्रेश कैसे करें"

listbox1.DataSource संपत्ति मान में परिवर्तन के लिए दिखती है लेकिन एक ही सूची को हर बार मान वास्तव में नहीं बदलेगा निर्दिष्ट करके।

आप स्वचालित रूप से नई वस्तुओं को पहचानने के लिए अपनी List<T> बजाय एक BindingList<T> List<T> उपयोग कर सकते हैं। आपके ShowData () विधि को स्टार्टअप पर एक बार कहा जाना चाहिए।

 public partial class MyForm:Form { public MyForm(){ InitializeComponent(); ShowData(); } BindingList<MyData> data = new BindingList<MyData>(); private void ShowData() { listBox1.DataSource = data; listBox1.DisplayMember = "Name"; listBox1.ValueMember = "Id"; } private void buttonAddData_Click(object sender, EventArgs e) { var selection = (MyData)comboBox1.SelectedItem; data.Add(selection); } } 

मैं BindingSource का उपयोग करने का सुझाव BindingSource क्योंकि यह कनेक्ट नियंत्रण को ठीक से अपडेट करेगा I

 public partial class MyForm : Form { List<MyData> data = new List<MyData>(); BindingSource bs = new BindingSource(); public MyForm() { IntializeComponents(); bs.DataSource = data; listBox1.DisplayMember = "Name"; listBox1.ValueMember = "Id"; listBox1.DataSource = bs; } private void buttonAddData_Click(object sender, EventArgs e) { var selection = (MyData)comboBox1.SelectedItem; data.Add(selection); bs.ResetBindings(false); } } 

मक्खी पर नियंत्रण डेटा स्रोत बदलने से कुछ समय अजीब परिणाम उत्पन्न होता है।

सूचीबन्द पता नहीं लगा कि आपने DataSource बदल दिया है। यह केवल तभी ताज़ा होगा जब Datasource बदल गया है, इसलिए DataSource को पहले रिक्त करने के लिए सेट करें:

  listBox1.DataSource = null; listBox1.DataSource = data; 

आप वस्तुओं को फिर भी साफ़ कर सकते हैं फिर डाटासर्स को फिर से सेट कर सकते हैं:

 listBox1.Items.Clear(); listBox1.DataSource = data; 

वैकल्पिक रूप से और संभवत: इसका कार्यान्वयन करने का सबसे सही तरीका प्रदान की गई ObservableCollection<T> का उपयोग करना है। यह INotifyCollectionChanged को लागू करने के एकमात्र उद्देश्य के साथ बनाया गया है।

 public partial class MyForm : Form { ObservableCollection<MyData> data = new ObservableCollection<MyData>(); public MyForm() { listBox1.DataSource = data; listBox1.DisplayMember = "Name"; listBox1.ValueMember = "Id"; } private void buttonAddData_Click(object sender, EventArgs e) { var selection = (MyData)comboBox1.SelectedItem; data.Add(selection); } } 

क्योंकि ObservableCollection<T> लागू करता है INotifyCollectionChanged बाइंडिंग स्वचालित रूप से जब भी आपके डेटा बदलता है ListBox अद्यतन करेगा

कॉल ShowData() कॉल करें जब प्रपत्र ShowData() पर आपके सूचीबॉक्टल को पॉप्युलेट करने के लिए आरंभ होता है

  public Department() { InitializeComponent(); ShowData(); } 

ShowData() विधि, जहां BindingSource , DisplayMember और ValueMember सेट कर रहे हैं

 private void ShowData() { using (var uow = new UnitOfWork(new SellContext())) { listBox1.DataSource = uow.Departments.GetAll().ToList(); listBox1.DisplayMember = "DepartmentName"; listBox1.ValueMember = "DepartmentId"; //listBox1.Invalidate(); } } 

नीचे दिए गए कार्यान्वयन में जब एक विभाग को डेटाबेस से हटा दिया जाता है, तो वर्तमान संग्रह के साथ सूचीबैक रिफ्रेश होता है

 private void button1_Click(object sender, EventArgs e) { try { using (var uow = new UnitOfWork(new SellContext())) { int count = uow.Departments.FindDepartmentByName(txtDeptName.Text.ToString()); if (count>0) { MessageBox.Show("This Department Already Exists", "SellRight", MessageBoxButtons.OK, MessageBoxIcon.Hand); } else { department dept = new department(); dept.DepartmentName = txtDeptName.Text.ToString(); uow.Departments.Create(dept); if (uow.Complete() > 0) { MessageBox.Show("New Department Created", "SellRight", MessageBoxButtons.OK, MessageBoxIcon.Information); txtDeptName.Text = ""; ShowData(); } else { MessageBox.Show("Unable to add Department", "SellRight", MessageBoxButtons.OK, MessageBoxIcon.Error); txtDeptName.Text = ""; ShowData(); } } } } catch(Exception ex) { ex.ToString(); } }