Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-用数据表填充组合框_C#_.net_Combobox_Datatable_Sharpdevelop - Fatal编程技术网

C#-用数据表填充组合框

C#-用数据表填充组合框,c#,.net,combobox,datatable,sharpdevelop,C#,.net,Combobox,Datatable,Sharpdevelop,我习惯于在有大量示例可用的情况下使用Java。出于各种原因,我不得不切换到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 =

我习惯于在有大量示例可用的情况下使用Java。出于各种原因,我不得不切换到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.DisplayMember = "Lang.Language";
这是错误的。换成

mnuActionLanguage.ComboBox.DisplayMember = "Language";
而且它可以工作(即使没有DataBind())。

有几点:

1) “DataBind()”仅适用于web应用程序(不是windows应用程序)

2) 您的代码看起来非常“JAVAish”(不是一件坏事,只是一个观察)

试试这个:

mnuActionLanguage.ComboBox.DataSource = languages;

如果那不起作用。。。然后我假设您的数据源在代码中的其他地方被踩到。

您是否在代码后面的DefaultView中应用了行过滤器?这可能会更改返回的结果

如果您直接引用数据列,我还将避免使用字符串作为显示成员,我将使用对象属性:

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

我用一个空白表单和标准组合尝试了这个方法,似乎对我很有效。

您需要设置ToolStripComboBox.ComboBox的绑定上下文

这里是我刚刚使用VisualStudio重新创建的代码的一个稍加修改的版本。在我的例子中,菜单项组合框称为toolStripComboBox1。请注意设置绑定上下文的最后一行代码

我注意到,如果组合位于toolstrip的visible are中,则绑定可以在没有此选项的情况下工作,但在下拉列表中则不行。你也有同样的问题吗

如果你不能让这个工作,通过我的联系页面给我一条线,我会把项目发给你。您将无法使用SharpDevelop加载它,但可以使用C#Express加载它

var languages=新字符串[2];
语言[0]=“英语”;
语言[1]=“德语”;
DataSet myDataSet=新数据集();
//---准备
DataTable lTable=新的DataTable(“Lang”);
DataColumn lName=新的DataColumn(“语言”,类型(字符串));
lTable.Columns.Add(lName);
for(int i=0;i
例如,我创建了一个表:

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);
或:

最后:

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

啊,你使用的是Windows窗体,而不是Web窗体。Tkx Alan,我也尝试过,并在上面进行了更正,但不幸的是,这种行为没有改变:(反正是Tkx!我将你的代码复制/粘贴到VS 2008中,修复并运行了它,组合框中有“英语”和“德语”。这不是你需要的吗?哦,现在我明白了,你也遇到了BindingContext问题,自己修复了它。好吧:)mnuActionLanguage.ComboBox.DataSource=languages;也没有帮助,ComboBox仍然是空的。Tkx!不错的地方,没有意识到combo在toolstrip中。我第一次看到;-)不,代码中没有行过滤器。无论出于何种原因,这个问题似乎完全与BindingContext有关
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";