[英]C#: Trouble going from combobox to dropdownlist
我仍然對編程非常陌生,因為我肯定會顯示我的問題。 在過去的兩天里,我完全陷於癱瘓,而在任何地方我都找不到答案。 可能是因為我只是忽略了一個顯而易見的問題,所以沒有人問過,但是事情就這樣了:
我已經在VS Express 2013中為Windows開發了一個應用程序,用戶可以在其中僅顯示對象名稱的組合框中選擇其他方法。 根據選擇,我將整個對象發送到“轉換器類”。
EU = new Converter("Enriched Uranium", "44");
CO = new Converter("Coolant", "9832");
BI = new Converter("Biocells", "2329");
CB = new Converter("Construction Blocks", "3828");
FR = new Converter("Fertilizer", "3693");
GL = new Converter("Genetically Enhanced Livestock", "15317");
object[] myArray1 = { EU, CO, BI, CB, FR, GL };
comboBox1.DisplayMember = "name";
該程序中大約有50個。 第一部分是名稱,另一部分是XML用於查找內容的ID。 他們在代碼中進一步執行很多工作,但這只是開始:
Converter a = ((Converter)comboBox1.SelectedItem);
a.CallXml();
a.taxPrice(comboBox2.Text);
a.getNumber(textBox4.Text);
a.getTax(taxrat);
依此類推...我知道它並不十分漂亮,而且我正在學習有很多方法可以使它在學習后更加有效。 但是現在,我專注於將整個內容轉換為網站,並使用VS Express 2013 for Web。
那里沒有組合框,所以我使用dropdownlist卡住了。 上面的使用“ AddRange”加載列表的方法不起作用,並且我嘗試了約一百種東西,直到我最終以這種方式顯示名稱:
List<object> myList1 = new List<object>();
myList1.Add(EU);
myList1.Add(CO);
myList1.Add(BI);
DropDownList2.DataSource = myList1;
DropDownList2.DataTextField = "name";
DropDownList2.DataBind();
到現在為止還挺好! 我現在完全陷入困境的地方是需要用戶選擇返回對象並將其發送到“轉換器”類的位置。 這是我感到很開心的結束時間:
protected void Button1_Click(object sender, EventArgs e)
{
object a = (Converter)DropDownList2.SelectedItem;
}
它說:“無法將blablabla類型轉換為WebApplication4.Converter。怎么了?我有什么辦法可以使組合框以良好的舊winform形式執行相同的操作?
我想做的是,當用戶選擇“濃縮鈾”時,該程序將調用“轉換器類”,例如:
EU.CallXml();
等等。
歡迎來到Web開發和整個無狀態的請求/響應機制的世界。 要完全理解這一點,請閱讀Windows和Web開發之間的區別。
在Webforms中,控件比Winforms控件更加基本。 實際上,綁定只是一種方法-它僅使用源數據來獲取繪制列表所需的信息。 如果您考慮它,它必須是這樣的,否則它將不得不在服務器和客戶端瀏覽器之間傳遞您的整個對象列表,這將很浪費,並且在無狀態環境中很難知道何時綁定回來等。 。
網絡表單Dropdownlist.SelectedItem的類型為ListBoxItem-僅具有從dropdownlist控件中繪制和獲取項目所需的最少字段-僅是ListItem中的文本以及是否已選中。 這就是為什么您不能將其投射回轉換器對象的原因。
那么,如何才能將所選項目映射回Converter? 您可以使用字符串值Dropdownlist.SelectedItem.Value進行某種查找,也可以使用Dropdownlist.SelectedIndex從源列表中的該索引中查找項目。
你可以做這樣的事情
List<Converter> myList1 = GetConverters(); //todo - write a method to make the list
DropDownList2.DataSource = myList1;
DropDownList2.DataTextField = "name";
DropDownList2.DataBind();
和點擊事件
protected void Button1_Click(object sender, EventArgs e)
{
string s = DropDownList2.SelectedItem.Value;
Converter c = GetConverters().Find(x => x.name == s);
//do whatever with the converter
}
免責聲明-所有內容均未編譯-可能會有一些錯誤。 同樣,它絕對不是最好的方法(不進行錯誤檢查+僅進行數據源綁定的轉換器列表有點浪費),只是向您展示如何做到這一點。
另一個警告-確保您僅將數據源綁定一次-如果您在未檢查頁面未回發的情況下進行綁定,則可能會在嘗試獲取該值之前進行綁定-這意味着第一個值將始終出現選擇。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.