2013-06-03 67 views
1

我有一個組合框的窗體。我正在閱讀一個文件,並在需要預先填充此組合框的文件中提供信息。 實施例: 組合框被填充像這樣:C#Windows窗體在組合框中搜索特定值

 DataTable dataTable = new DataTable("Letters"); 
     dataTable.Columns.Add("One"); 
     dataTable.Columns.Add("Two"); 
     dataTable.Rows.Add("AB", "Alpha Bravo"); 
     dataTable.Rows.Add("BC", "Bravo Charlie"); 
     dataTable.Rows.Add("CD", "Charlie Delta"); 
     dataTable.Rows.Add("DE", "Delta Echo"); 
     cbLetters.DataSource = dataTable; 
     cbLetters.DisplayMember = "Two"; 
     cbLetters.ValueMember = "One"; 
     cbLetters.SelectedItem = 1; 
     cbLetters.Refresh(); 

當我搜索這樣的:cbLetters.SelectedValue = FieldFromFile.ToString();我沒有找回任何記錄。 FieldFromFile填充了「CD」。我也試過cbLetters.SelectedValue = FieldFromFile。

當我像這樣搜索:cbLetters.SelectedValue =「CD」;按預期檢索Charlie Delta。

這是在殺我。不用說我是C#的新手。任何幫助將不勝感激。

非常感謝!

+0

但是當我使用cbLetters.SelectedValue = 「CD」 我得到了什麼我在找。那麼如何使用變量進行搜索?我嘗試了很多我發現的想法,但似乎沒有一個適合我的案例。我不相信沒有人做過類似的事情。 –

+0

'FieldFromFile'的代碼在哪裏? –

+0

@Brian - 這是一個來自我正在閱讀的文件的字段。這是一個字符串,填充2個字符。 –

回答

0

問題沒有得到值,問題是設置數據源,注意ComboBox不包含元素。例如:

DataTable dataTable = new DataTable("Letters"); 
dataTable.Columns.Add("One"); 
dataTable.Columns.Add("Two"); 
dataTable.Rows.Add("AB", "Alpha Bravo"); 
dataTable.Rows.Add("BC", "Bravo Charlie"); 
dataTable.Rows.Add("CD", "Charlie Delta"); 
dataTable.Rows.Add("DE", "Delta Echo"); 
var cbLetters = new ComboBox(); 
cbLetters.DataSource = dataTable.DataSet; 
cbLetters.DisplayMember = "Two"; 
cbLetters.ValueMember = "One"; 
cbLetters.Refresh(); 
var foo = cbLetters.Items.Count; 
Console.Write(foo); //retun 0 

編輯:問題是你的代碼不具有任何的DataBind 「cbLetters.DataBind();」,

DataTable dataTable = new DataTable("Letters"); 
dataTable.Columns.Add("One"); 
dataTable.Columns.Add("Two"); 
dataTable.Rows.Add("AB", "Alpha Bravo"); 
dataTable.Rows.Add("BC", "Bravo Charlie"); 
dataTable.Rows.Add("CD", "Charlie Delta"); 
dataTable.Rows.Add("DE", "Delta Echo"); 

var cbLetters = new DropDownList(); 
cbLetters.DataSource = dataTable.DefaultView; 
cbLetters.DataSource = new BindingSource(dataTable, null); 
cbLetters.DataValueField = "one"; 
cbLetters.DataTextField = "two"; 
cbLetters.DataBind(); // Here DataBind 
cbLetters.SelectedIndex = 2; 
//cbLetters.Refresh(); 
Console.Write("value selected -> " + cbLetters.SelectedValue); //return CD 
Console.Write("text selected -> " + cbLetters.SelectedItem.Text); // return Charlie Delta