সি # ড্রপডাউনলিস্টি ডেটাসোর্স হিসাবে একটি অভিধান সহ


112

আমি সেট করতে চান DataTextFieldএবং DataValueFieldএকটি এর Dropdownlist(languageList) এর অভিধান (তালিকা) ব্যবহার languageCodকী এবং ভাষা নাম (ইংরেজি) প্রদর্শন পাঠ্য হিসাবে হিসাবে (bn-GB)।

প্রাসঙ্গিক কোড:

string[] languageCodsList= service.LanguagesAvailable();
Dictionary<string, string> list = 
                   new Dictionary<string, string>(languageCodsList.Length);

foreach (string cod in languageCodsList)
{
    CultureInfo cul = new CultureInfo(cod);
    list.Add(cod, cul.DisplayName);
}
languageList.DataSource = list;
languageList.DataBind();

আমি কিভাবে সেট করতে পারেন DataTextFieldএবং DataValueField?

উত্তর:


205

এর মতো আপনি "কী" এবং "মান" পাঠ্য ব্যবহার করে ড্রপডাউনলিস্টের ডেটাটেক্সটফিল্ড এবং ডেটাভ্যালুফিল্ড সেট করতে পারেন:

    Dictionary<string, string> list = new Dictionary<string, string>();
    list.Add("item 1", "Item 1");
    list.Add("item 2", "Item 2");
    list.Add("item 3", "Item 3");
    list.Add("item 4", "Item 4");

    ddl.DataSource = list;
    ddl.DataTextField = "Value";
    ddl.DataValueField = "Key";
    ddl.DataBind();

12
আমি টেক্সটফিল্ডকে "কী" এবং ভ্যালুফিল্ডকে মান হিসাবে সেট করার পরামর্শ দেব। আমি মনে করি এটি আরও স্বজ্ঞাত।
MGOwen

15
@ এমজিওউয়েন সাধারণ "মান" এর কারণে ডাটাভ্যালুফিল্ডকে মান হিসাবে সেট করা স্বজ্ঞাত মনে হতে পারে তবে এটি ডেটাস্ট্রাকচার / নিয়ন্ত্রণের নিয়মিত ব্যবহারে অযৌক্তিক। এ সম্পর্কে বিশদগুলির জন্য, জন স্কিটির উত্তর সম্পর্কে আমার মন্তব্য দেখুন।
দানি

আমি একটি তালিকা দেখতে পাচ্ছি না 2 যোগ করুন যাতে 2 টি আরোগুলি লাগে .. কেবলমাত্র একটি যা একটি আরগ নেয়। এই উইনফর্মস ??
hrh

@ এইচআরএইচ তবে আপনি সম্ভবত একটি ব্যবহার করছেন না Dictionary<TKey, TValue>, তবে সম্ভবত এ List<T>
sshow

@ কানাভার কি ডেটা টেক্সট ফিল্ডটিকে "কী-মান" হিসাবে সেট করা সম্ভব ....? আমি এটা কিভাবে করবো.
শ্রাবণ কুমার

11

যখন একটি অভিধান গণনা করা হয়, এটি KeyValuePair<TKey,TValue>অবজেক্টগুলি উত্পন্ন করবে ... সুতরাং আপনাকে মান / কী বৈশিষ্ট্যগুলি নির্বাচন করতে যথাক্রমে DataTextFieldএবং DataValueFieldযথাক্রমে "মান" এবং "কী" নির্দিষ্ট করতে হবে।

জো এর মন্তব্যে ধন্যবাদ, এগুলি সঠিকভাবে পেতে আমি পুনরায় প্রশ্নটি পুনরায় পাঠ করি। সাধারণত আমি অভিধানে "কী" প্রদর্শিত পাঠ্য হিসাবে প্রদর্শিত হবে এবং "মান" মান আনার প্রত্যাশা করতাম। আপনার নমুনা কোড যদিও এগুলি অন্যভাবে ব্যবহার করে। আপনার যদি সত্যিই এগুলি হওয়ার দরকার না হয় তবে আপনি নিজের কোডটি লেখার বিষয়ে বিবেচনা করতে পারেন:

list.Add(cul.DisplayName, cod);

(এবং তারপরে অবশ্যই "কী" DataTextFieldএবং "মান" ব্যবহার করার জন্য বাধ্যতামূলক পরিবর্তন করা হয়েছে DataValueField))

প্রকৃতপক্ষে, আমি প্রস্তাব দিচ্ছি যে আপনি সম্ভবত অভিধানের পরিবর্তে একটি তালিকা চান , আপনি প্রথমে একটি অভিধান ব্যবহার করে পুনর্বিবেচনা করতে পারেন। আপনি কেবল এটি ব্যবহার করতে পারেন List<KeyValuePair<string, string>>:

string[] languageCodsList = service.LanguagesAvailable();
var list = new List<KeyValuePair<string, string>>();

foreach (string cod in languageCodsList)
{
    CultureInfo cul = new CultureInfo(cod);
    list.Add(new KeyValuePair<string, string>(cul.DisplayName, cod));
}

বিকল্পভাবে, সরল CultureInfoমানগুলির একটি তালিকা ব্যবহার করুন । লিনকিউ এটি সত্যই সহজ করে তোলে:

var cultures = service.LanguagesAvailable()
                      .Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();

আপনি যদি লিনকিউ ব্যবহার না করে থাকেন তবে আপনি এখনও সাধারণ ফোরচ লুপ ব্যবহার করতে পারেন:

List<CultureInfo> cultures = new List<CultureInfo>();
foreach (string cod in service.LanguagesAvailable())
{
    cultures.Add(new CultureInfo(cod));
}
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();

3
আসলে, এটি ভুল - স্বীকৃত উত্তরে আমার মন্তব্য দেখুন।
উইনস্টন স্মিথ

আহ, আমি প্রশ্নটি ভুল করে লিখতে চাই। এগুলি একটি অভিধানে "ভুল" উপায়ে গোল করা আমার কাছে বিভ্রান্তিকর বলে মনে হচ্ছে। আমার উত্তর সম্পাদনা করবে।
জন স্কিটি

1
@ জোনস্কিট "পিছনের দিক" সংঘের কারণ হ'ল অভিধানে মূল / মান জুটি হিসাবে সংরক্ষণ করা তথ্য সাধারণত কী (লুকিং মান) একটি ডেটা অ্যাসোসিয়েশন হিসাবে ব্যবহার করে (যেমন, ডাটাবেস রেফারেন্সিংয়ের জন্য), এবং একটি ড্রপডাউন তালিকায় , এটি ডেটাওয়ালিউফিল্ডের সাথে সম্পর্কিত, অর্থাত্ কোনও পোষ্টের রিটার্ন মান , যা আপনাকে নির্বাচিত আইটেমটি ডেটা টেক্সটফিল্ডের চেয়ে বেশি প্রদর্শন করে, অর্থাৎ প্রদর্শন মান। (ড্রপডাউনলিস্টগুলির সবেমাত্র একটি নামকরণের সম্মেলন রয়েছে)
দানি

6

যদি ড্রপডাউনলিস্টটি আপনার এসপেক্স পৃষ্ঠায় ঘোষণা করা হয় এবং কোডবিহাইডে না হয় তবে আপনি এটি এটি করতে পারেন।

.aspx:

<asp:DropDownList ID="ddlStatus" runat="server" DataSource="<%# Statuses %>"
     DataValueField="Key" DataTextField="Value"></asp:DropDownList>

.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    ddlStatus.DataBind();
    // or use Page.DataBind() to bind everything
}

public Dictionary<int, string> Statuses
{
    get 
    {
        // do database/webservice lookup here to populate Dictionary
    }
};

সম্মত। এটি লক্ষণীয় যে এটি প্রয়োজনীয় যে এটি মূল্যায়নের জন্য কোনও সার্ভার-সাইড অবজেক্ট। <% # সিনট্যাক্স%> ব্যবহার করে আপনি এটিকে ইনলাইন পাস করতে পারবেন না। এটি কোনও <স্ক্রিপ্ট রুনাট = "সার্ভার"> হোক বা উপরে যেমন ম্যাট-এর উদাহরণে দেখা গেছে, তা আপনার পর্যন্ত। এটা আসলে কাজ করে।
ব্যারি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.