문제

나는 많은 양의 예제를 사용할 수있는 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.databind ()는 인터넷에서 찾은 것이지만 내 경우에는 작동하지 않습니다.

해결책

mnuActionLanguage.ComboBox.BindingContext = this.BindingContext;

결국 문제를 해결했습니다!

도움이 되었습니까?

해결책

Toolstripcombobox.combobox의 바인딩 컨텍스트를 설정해야합니다.

다음은 Visual Studio를 사용하여 방금 재현 한 코드의 약간 수정 된 버전입니다. 메뉴 항목 콤보 상자는 제 경우에는 ToolStripcombobox1이라고합니다. 바인딩 컨텍스트를 설정하려면 마지막 코드 줄에 유의하십시오.

콤보가 가시 안에있는 경우 공구 스트립이라는 것을 알았습니다. 바인딩은 이것없이 작동하지만 드롭 다운에있을 때는 그렇지 않습니다. 같은 문제가 발생합니까?

이 작업을 수행 할 수 없다면 연락처 페이지를 통해 줄을 삭제하면 프로젝트를 보내 드리겠습니다. 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";

코드의 뒷부분에서 defaultView에 RowFilter를 적용하고 있습니까? 이로 인해 반환 된 결과가 변경 될 수 있습니다.

직접 참조가있는 경우 객체 속성을 사용하는 데이터 열을 직접 참조하면 문자열을 디스플레이 멤버로 사용하지 않습니다.

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