سؤال

أنا معتاد على العمل مع جافا حيث تتوفر كميات كبيرة من الأمثلة. لأسباب مختلفة ، اضطررت إلى التبديل إلى C# ومحاولة القيام بما يلي في SharpDevelop:

// Form has a menu containing a combobox added via SharpDevelop's GUI

// --- Variables
languages = new string[2];
languages[0] = "English";
languages[1] = "German";
DataSet myDataSet = new DataSet();

// --- Preparation
DataTable lTable = new DataTable("Lang");
DataColumn lName = new DataColumn("Language", typeof(string));
lTable.Columns.Add( lName );
for( int i=0; i<languages.Length; i++ ) {
    DataRow lLang = lTable.NewRow();
    lLang["Language"] = languages[i];
    lTable.Rows.Add(lLang);
}
myDataSet.Tables.Add(lTable);

// --- Handling the combobox
mnuActionLanguage.ComboBox.DataSource = myDataSet.Tables["Lang"].DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = "Language";

قد يفترض المرء أن يرى بعض القيم في المنسدلة ، لكنه فارغ. من فضلك قل لي ما أفعله خطأ ؛ (

تحرير: mnuactionlanguage.combobox.databind () هو ما وجدته أيضًا على الشبكة ، لكنه لا يعمل في حالتي.

المحلول

mnuActionLanguage.ComboBox.BindingContext = this.BindingContext;

في النهاية حل المشكلة!

هل كانت مفيدة؟

المحلول

تحتاج إلى تعيين سياق الربط لـ toolstripcombobox.combobox.

فيما يلي نسخة معدلة قليلاً من الكود الذي قمت بإعادة إنشائه للتو باستخدام Visual Studio. يسمى مربع التحرير والسرد عنصر القائمة ToolStripcombobox1 في حالتي. لاحظ السطر الأخير من التعليمات البرمجية لتعيين سياق الربط.

لقد لاحظت أنه إذا كان التحرير والسرد مرئيًا من ToolStrip ، فإن الربط يعمل بدون هذا ولكن ليس عندما يكون في المنسدلة. هل تحصل على نفس المشكلة؟

إذا لم تتمكن من الحصول على هذا العمل ، فأسقط لي خطًا عبر صفحة الاتصال الخاصة بي وسأرسل لك المشروع. لن تتمكن من تحميله باستخدام SharpDevelop ولكن مع C# Express.

var languages = new string[2];
languages[0] = "English";
languages[1] = "German";

DataSet myDataSet = new DataSet();

// --- Preparation
DataTable lTable = new DataTable("Lang");
DataColumn lName = new DataColumn("Language", typeof(string));
lTable.Columns.Add(lName);

for (int i = 0; i < languages.Length; i++)
{
    DataRow lLang = lTable.NewRow();
    lLang["Language"] = languages[i];
    lTable.Rows.Add(lLang);
}
myDataSet.Tables.Add(lTable);

toolStripComboBox1.ComboBox.DataSource = myDataSet.Tables["Lang"].DefaultView;
toolStripComboBox1.ComboBox.DisplayMember = "Language";

toolStripComboBox1.ComboBox.BindingContext = this.BindingContext;

نصائح أخرى

string strConn = "Data Source=SEZSW08;Initial Catalog=Nidhi;Integrated Security=True";
SqlConnection Con = new SqlConnection(strConn);
Con.Open();
string strCmd = "select companyName from companyinfo where CompanyName='" + cmbCompName.SelectedValue + "';";
SqlDataAdapter da = new SqlDataAdapter(strCmd, Con);
DataSet ds = new DataSet();
Con.Close();
da.Fill(ds);
cmbCompName.DataSource = ds;
cmbCompName.DisplayMember = "CompanyName";
cmbCompName.ValueMember = "CompanyName";
//cmbCompName.DataBind();
cmbCompName.Enabled = true;

على سبيل المثال ، قمت بإنشاء جدول:

DataTable dt = new DataTable ();
dt.Columns.Add("Title", typeof(string));
dt.Columns.Add("Value", typeof(int));

أضف سجل إلى الجدول:

DataRow row = dt.NewRow();
row["Title"] = "Price"
row["Value"] = 2000;
dt.Rows.Add(row);

أو :

dt.Rows.Add("Price",2000);

أخيرا :

combo.DataSource = dt;
combo.DisplayMember = "Title";
combo.ValueMember = "Value";

هل تقوم بتطبيق rowfilter على DefaultView الخاص بك لاحقًا في الرمز؟ هذا يمكن أن يغير النتائج التي تم إرجاعها.

أود أيضًا تجنب استخدام السلسلة كعضو عرض إذا كان لديك مرجع مباشر لعمود البيانات الذي سأستخدمه خصائص الكائن:

mnuActionLanguage.ComboBox.DataSource = lTable.DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = lName.ColumnName;

لقد جربت هذا مع شكل فارغ وسرد قياسي ، ويبدو أنه يعمل بالنسبة لي.

بضع نقاط:

1) "Databind ()" مخصص فقط لتطبيقات الويب (وليس تطبيقات Windows).

2) يبدو رمزك "Javaish" (ليس شيئًا سيئًا ، مجرد ملاحظة).

جرب هذا:

mnuActionLanguage.ComboBox.DataSource = languages;

إذا لم ينجح ذلك ... فأنا أفترض أن مصدر البيانات الخاص بك يتم تخطيه في مكان آخر في الكود.

هذا الخط

mnuActionLanguage.ComboBox.DisplayMember = "Lang.Language";

خطأ. تغييره إلى

mnuActionLanguage.ComboBox.DisplayMember = "Language";

وسوف تعمل (حتى بدون databind ()).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top