studio - menu dinamico asp net c#
Cómo crear un menú desplegable en WinForms y C# (5)
Soy nuevo en el uso de Visual Studio / WinForms / C #
Intento crear un menú desplegable simple donde cada valor puede tener un valor y una etiqueta.
Esto es lo que haría en HTML si estuviera creando una aplicación web. Pero, ¿cómo puedo hacer esto con C # y WinForms?
<select>
<option value="0">Please select One</option>
<option value="1">The first Options</option>
<option value="2">The Second Options</option>
<option value="3">The Third Options</option>
</select>
Intenté con ComboBox, pero parece que no puedo agregar un valor y una etiqueta y el usuario puede escribir lo que quiera.
Intenté un ListBox pero eso no me permitió usar valor y etiqueta también.
ComboBox muestra los resultados ToString
llamada a ToString
, por lo que puede definir una clase de visualización que ajuste el valor y el texto, y los agregue a su cuadro combinado.
Es decir:
public class ItemDisplay<TValue>
{
private readonly string m_displayText;
public ItemDisplay(TValue value, String displayText)
{
this.Value = value;
m_displayText = displayText;
}
public TValue Value { get; set; }
public override string ToString()
{
return m_displayText;
}
}
y agregue elementos a su combobox de la siguiente manera:
comboBox1.Items.Add(new ItemDisplay<int>(1, "FirstValue"));
comboBox1.Items.Add(new ItemDisplay<int>(2, "Second"));
comboBox1.Items.Add(new ItemDisplay<int>(3, "Third"));
Necesita establecer un origen de datos para su Combobox, es mejor si crea una clase y pasa una lista de Objetos, por ejemplo:
private void Init()
{
List<Item> items = new List<Item>();
items.Add(new Item() { Text = "displayText1", Value = "ValueText1" });
items.Add(new Item() { Text = "displayText2", Value = "ValueText2" });
items.Add(new Item() { Text = "displayText3", Value = "ValueText3" });
comboBox1.DataSource = items;
comboBox1.DisplayMember = "Text";
comboBox1.ValueMember = "Value";
}
public class Item
{
public Item() { }
public string Value { set; get; }
public string Text { set; get; }
}
Coloque el método Init()
en su FormName_Load(object sender, EventArgs e){}
.
Parece que el valor es solo una referencia de qué elemento se selecciona, ¿correcto? Entonces puede usar el índice del cuadro combinado, lo hace mucho más fácil.
No estoy seguro si sus artículos son conocidos antes de la compilación, si es así, simplemente agréguelos al diseñador, propiedades del cuadro combinado. De lo contrario, puede agregarlos dinámicamente con solo hacer:
List<string> items = new List<string>() { "item1", "item2" };
comboBox1.DataSource = items;
Y para saber qué elemento se selecciona:
int index = comboBox1.SelectedIndex;
Si desea un valor y una leyenda (etiqueta), cree una clase apropiada
class ComboItem
{
public int ID { get; set; }
public string Text { get; set; }
}
En el ComboBox, configura la propiedad DisplayMember
en Text
y la propiedad ValueMember
en ID
.
DropDownStyle
de ComboBox determina su comportamiento. DropDownStyle.DropDown
permite al usuario escribir texto. Con DropDownStyle.DropDownList
el usuario solo puede seleccionar elementos de la lista.
Puedes llenar el ComboBox
así:
myCombo.DataSource = new ComboItem[] {
new ComboItem{ ID = 1, Text = "One" },
new ComboItem{ ID = 2, Text = "Two" },
new ComboItem{ ID = 3, Text = "Three" }
};
El DataSource
puede ser cualquier tipo de enumerable.
Puede recuperar la ID seleccionada como esta
int id = (int)myComboBox.SelectedValue;
Tenga en cuenta que puede agregar cualquier tipo de elemento al ComboBox. Si no especifica las propiedades DisplayMember
y ValueMember
, ComboBox utiliza el método ToString
del objeto para determinar el texto que se muestra y puede recuperar el elemento seleccionado (no el valor seleccionado) a través de la propiedad SelectedItem
.
Si agrega objetos de este tipo ...
class Person
{
public int PersonID { get; set }
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return FirstName + " " + LastName;
}
}
... al ComboBox, puede recuperar el elemento seleccionado como este
Person selectedPerson = (Person)myComboBox.SelectedItem;
int personID = selectedPerson.PersonID;
El ComboBox mostrará el nombre y apellido de las personas.
Para crear un menú desplegable en el controlador, use el elemento selectlist en el método get. Y lo mismo necesita paas en el método de publicación también.
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem
{
Text = "car",
Value = "car"
});
ViewBag.List = new SelectList(items, "Text", "Value");
A la vista, debes pasar la lista desplegable.
@Html.DropDownList("option", (ViewBag.List as SelectList), "Select", new { @style ="padding:5.5px;margin-bottom:8px;margin-right:-5px;" })
`