2014-04-15 5 views
1

Я все еще очень новичок в программировании, так как я уверен, что мой вопрос покажет. Я провел последние два дня совершенно застрял, и я не смог найти ответ на это где угодно. Возможно, потому, что им просто не видно что-то настолько очевидное, что никто не должен был спрашивать, но вот он:C#: проблема с combobox до выпадающего списка

Я сделал приложение в VS Express 2013 для окон, где пользователь выбирает альтернативу из выпадающего списка, отображающего только имя объекта. Из выбора я отправляю весь объект в свой «Класс конвертера».

 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 для поиска материала. Они выполняют много вещей дальше в коде, но это начало:

 Converter a = ((Converter)comboBox1.SelectedItem); 
     a.CallXml(); 
     a.taxPrice(comboBox2.Text); 
     a.getNumber(textBox4.Text); 
     a.getTax(taxrat); 

И так далее ... Я знаю, что это не совсем красиво, и я вижу много способов, чтобы сделать его более эффективным после ухода. Но сейчас я сосредоточился на преобразовании всего этого на веб-сайт и im, используя VS Express 2013 для Интернета.

Там нет комбобокса, поэтому я застрял, используя раскрывающийся список. Описанный выше способ загрузки списка с «AddRange» не работает, и ив TrID около ста вещей, пока я, наконец, получить, чтобы отобразить имена таким образом:

 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; 
    } 

Он говорит:.? «Не удается преобразовать тип блаблабла в WebApplication4.Converter Каким И есть ли способ, что я могу сделать, чтобы выполнить те же действия, выпадающий список сделал назад ? в хорошем, старом WinForm

что я хочу сделать то, что, когда пользователь выбирает «Обогащенный уран», программа называет «класс преобразования» с, например:.

 EU.CallXml(); 

И так далее

+0

Вы делаете приложение ASP.NET Web Forms на втором этапе? – krillgar

+0

@krillgar Привет! Да, это приложение WebApplication. – DyreVaa

+0

@krillgar Я, однако, пробовал различные типы форм. От пустой страницы до всех видов сумасшедших вещей. Хавенту удалось это понять. – DyreVaa

ответ

0

Добро пожаловать в мир веб-разработки и весь механизм запроса/ответа без учета состояния. Чтобы это полностью понять, вы можете прочитать о различиях между окнами и веб-разработкой.

В веб-формах элементы управления намного более простые, чем у winforms. На самом деле привязка - это всего лишь один способ - просто использовать исходные данные, чтобы получить информацию, необходимую для рисования списка. Если вы думаете об этом, это должно быть так, иначе вам придется передать весь список объектов между сервером и браузером клиентов, который был бы расточительным, и его трудно в среде без состояния, чтобы знать, когда привязывать обратно и т. Д. .

Веб-формы Dropdownlist.SelectedItem имеет тип ListBoxItem - у которого есть только минимальные поля, необходимые для рисования, и получить элемент из элемента управления dropdownlist - только текст из ListItem и выбран ли его. Вот почему вы не можете вернуть его обратно в объект конвертера.

Итак, как вы можете получить карту выбранного элемента обратно в ваш конвертер? Вы можете либо использовать строковое значение 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 
} 

отказ от ответственности - все это не компилируется - это может иметь некоторые ошибки. Кроме того, это определенно не лучший способ сделать это (проверка ошибок + составление списка конвертеров просто для привязки к источнику данных немного расточительно), просто чтобы показать, как это можно сделать.

Еще одно предупреждение - убедитесь, что вы выполняете привязку данных только один раз - возможно, если вы сделаете это без проверки того, что страница не отправила обратно, она может связываться непосредственно перед тем, как вы попытаетесь получить значение - что означает первый значение всегда будет отображаться. Удачи!

+0

Спасибо за подробный ответ! Я очень ценю это. Мне кажется, что я недооценил различия между Windows и Web, и, вероятно, это хорошая идея для меня превратить конверт на льду - и, скорее, начать новый проект, я могу научиться вебу снизу. Мне действительно нужен был вход, чтобы получить этот материал из моего ума. Был в моей голове день и ночь в течение последних нескольких дней. Снова: Большое спасибо за ответ и ввод! Сообщество здесь действительно великолепен, и я рад, что вы нашли время, чтобы ответить на глупые вопросы от новичка. – DyreVaa

+0

Не волнуйся, я был в одной лодке не так давно - годы окон дев, затем перешли в Интернет - это целый ряд проблем! Да, это звучит неплохо, и я думаю, что веб-формы на самом деле являются хорошим местом для начала веб-разработки, так как вы изучите все основные проблемы на раннем этапе (например, без гражданства +, где хранить данные/справляться с обратной почтой и т. Д.). После того, как у вас есть гвоздь, вы обнаружите, что есть более современные области веб-разработчика, чтобы перейти к (MVC в качестве основного примера), что почти заставило бы вас улучшить код. Наслаждаться. – ajg

Смежные вопросы