কম্বোবক্সে কীভাবে একটি তালিকা আবদ্ধ করবেন?


107

আমি BindingSourceক্লাস অবজেক্টের তালিকার সাথে একটি সংযোগ করতে চাই এবং তারপরে বস্তুগুলিকে একটি কম্বোবক্সে মান দিতে চাই।
কেউ কীভাবে এটি করার পরামর্শ দিতে পারে?

public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }

    public Country()
    {
        Cities = new List<City>();
    }
}

আমার শ্রেণি এবং আমি এর nameক্ষেত্রটি একটি বাঁধাইয়ের উত্সে আবদ্ধ করতে চাই যা তখন কোনও কম্বোবক্সের সাথে যুক্ত হতে পারে


উইন্ডফর্মগুলি যা আমি চাই তা দেশের অবজেক্টের বিশ্রামের নাম ক্ষেত্রের ডেটা মানগুলিকে সংযুক্ত করতে সহায়তা করে আমি এটি বের করব
মবিন

উত্তর:


160

আপনি যেমন একটি কম্বোবক্সের উল্লেখ করছেন, আমি ধরে নিচ্ছি যে আপনি দ্বি-ওয়ে ডেটাবাইন্ডিং ব্যবহার করতে চান না (যদি তা হয় তবে এটি ব্যবহার করে দেখুন BindingList)

public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }
    public Country(string _name)
    {
        Cities = new List<City>();
        Name = _name;
    }
}



List<Country> countries = new List<Country> { new Country("UK"), 
                                     new Country("Australia"), 
                                     new Country("France") };

var bindingSource1 = new BindingSource();
bindingSource1.DataSource = countries;

comboBox1.DataSource = bindingSource1.DataSource;

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";

দেশ আবদ্ধ কম্বো নির্বাচিত এটি করার জন্য, আপনি ভালো কিছু করতে চাই: Country country = (Country)comboBox1.SelectedItem;

আপনি যদি কম্বোবক্সকে ডায়নামিকভাবে আপডেট করতে চান তবে আপনাকে নিশ্চিত করতে হবে যে আপনি যে ডেটা স্ট্রাকচারটি DataSourceপ্রয়োগ হিসাবে সেট করেছেন IBindingList; যেমন একটি কাঠামো হয় BindingList<T>


টিপ: নিশ্চিত করুন যে আপনি DisplayMemberশ্রেণিতে কোনও সম্পত্তির সাথে বাধ্যবাধকতা বজায় রেখেছেন এবং কোনও সরকারী ক্ষেত্র নয়। আপনি যদি শ্রেণিটি ব্যবহার করেন public string Name { get; set; }এটি কাজ করবে তবে এটি যদি ব্যবহার public string Name;করে তবে মানটি অ্যাক্সেস করতে সক্ষম হবে না এবং পরিবর্তে কম্বো বাক্সের প্রতিটি লাইনের জন্য অবজেক্টের ধরণটি প্রদর্শন করবে।


... যা আপাতদৃষ্টিতে মনে হতে পারে তবে
হ্যান্ডসাইটে

12
আপনি কি bindingSource1এর ঘোষণাটি ব্যাখ্যা বা যুক্ত করতে পারেন ?
beppe9000

1
সিস্টেম.বাইন্ডোজ.ফর্মস.বাইন্ডিংসোর্স বাইন্ডিংসোর্স 1;
2.718

কি comboBox1.DataSource = bindingSource1.DataSource;সঠিক? নাকি তা হওয়া উচিত comboBox1.DataSource = bindingSource1;?
মাসউদ

27

ব্যাকগ্রাউন্ডারের জন্য, কম্বোবক্স / লিস্টবক্স ব্যবহারের জন্য দুটি উপায় রয়েছে

1) আইটেম বৈশিষ্ট্যে কান্ট্রি অবজেক্টস যুক্ত করুন এবং একটি দেশকে নির্বাচিত হিসাবে পুনরুদ্ধার করুন। এটি ব্যবহার করার জন্য আপনার দেশের টস্ট্রস্ট্রিং ওভাররাইড করা উচিত।

২) ডেটাবাইন্ডিং ব্যবহার করুন, ডাটাসোর্সকে একটি আইলিস্টে (তালিকা <>) সেট করুন এবং ডিসপ্লে মেম্বার, ভ্যালুমেম্বার এবং সিলেক্টভ্যালু ব্যবহার করুন

2 এর জন্য) আপনার প্রথমে দেশগুলির একটি তালিকা প্রয়োজন

// not tested, schematic:
List<Country> countries = ...;
...; // fill 

comboBox1.DataSource = countries;
comboBox1.DisplayMember="Name";
comboBox1.ValueMember="Cities";

এবং তারপরে সিলেকশন চেঞ্জে,

if (comboBox1.Selecteditem != null)
{
   comboBox2.DataSource=comboBox1.SelectedValue;

}

2
ধন্যবাদ তবে কিছুটা সমস্যা এখানে অ্যাপ্লিকেশনটি চালানোর সময় নামগুলি কম্বোবক্সে দৃশ্যমান নয়
মবিন

23
public MainWindow(){
    List<person> personList = new List<person>();

    personList.Add(new person { name = "rob", age = 32 } );
    personList.Add(new person { name = "annie", age = 24 } );
    personList.Add(new person { name = "paul", age = 19 } );

    comboBox1.DataSource = personList;
    comboBox1.DisplayMember = "name";

    comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);
}


void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    person selectedPerson = comboBox1.SelectedItem as person;
    messageBox.Show(selectedPerson.name, "caption goes here");
}

গম্ভীর গর্জন।


1
সিলেক্ট চেঞ্জড ইভেন্ট ব্যতীত এটি কাজ করে। নেট 4.0.০ এ নিয়ন্ত্রণে উপস্থিত হবে না। আমি সেলেকশন চেঞ্জকমিডেটের সাথে প্রতিস্থাপন করেছি এবং সবকিছু ঠিক আছে।
ওয়েড হ্যাটলার

0

এরকম কিছু চেষ্টা করুন:

yourControl.DataSource = countryInstance.Cities;

এবং আপনি যদি ওয়েবফর্মগুলি ব্যবহার করছেন তবে আপনার এই লাইনটি যুক্ত করতে হবে:

yourControl.DataBind();

1
পাশাপাশি কম্বোবক্স 1.ডাটাবাইন্ড (); ফাংশন আমি এটি সমাধানগুলিতে দেখতে পাচ্ছি না আমি উইনফর্মগুলি ব্যবহার করছি
মবিন

0
public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }

    public Country()
    {
        Cities = new List<City>();
    }
}

public class City 
{
    public string Name { get; set; } 
}

List<Country> Countries = new List<Country>
{
    new Country
    {
        Name = "Germany",
        Cities =
        {
            new City {Name = "Berlin"},
            new City {Name = "Hamburg"}
        }
    },
    new Country
    {
        Name = "England",
        Cities =
        {
            new City {Name = "London"},
            new City {Name = "Birmingham"}
        }
    }
};
bindingSource1.DataSource = Countries;
member_CountryComboBox.DataSource = bindingSource1.DataSource;
member_CountryComboBox.DisplayMember = "Name";
member_CountryCombo

Box.ValueMember = "Name";

এই কোডটি আমি এখন ব্যবহার করছি।


1
কয়েকটি নোট: একটি বাইন্ডিংসোর্স হ'ল লিংক-থ্রো উত্স হ'ল, আপনি এখন এটি ব্যবহার করছেন না, সম্ভবত ঠিক Ok তবে আপনি যদি অন্য জিনিসগুলির লিঙ্ক আপ করতে এটি ব্যবহার করতে চান তবে সদস্য_সিবিএক্স = বাইন্ডিংসোর্স 1 ব্যবহার করুন;
হেন্ক হলটারম্যান

-1

আপনি যদি কোনও সরঞ্জাম স্ট্রিপকমবক্স ব্যবহার করছেন তবে কোনও ডেটা উত্স উন্মুক্ত নেই (.NET 4.0):

List<string> someList = new List<string>();
someList.Add("value");
someList.Add("value");
someList.Add("value");

toolStripComboBox1.Items.AddRange(someList.ToArray());

3
সেক্ষেত্রে আপনার ব্যবহার করা দরকার ToolstripComboBox.ComboBox.DataSource। দেখে মনে হচ্ছে ToolstripComboBoxএটি কোনও সাধারণের জন্য একটি মোড়কের মতো ComboBox
yu_ominae
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.