.net - una - lista desplegable y formato condicional
¿Cómo se puede vincular una tabla hash a una lista desplegable? (6)
¿Esto es winforms, wpf o asp.net? [actualización: ahh ... winforms ;-p]
winforms quiere que los datos sean IList
(o, indirectamente, a través de IListSource
), así que supongo (por el comentario) que está utilizando winforms. Ninguna de las colecciones incorporadas tipo diccionario implementan IList
, pero para ser honesto, no importa: si usted está vinculando los datos, el volumen es probablemente bastante pequeño, por lo que una lista regular debería estar bien.
La mejor opción es algo así como List<T>
o BindingList<T>
, donde T
tiene todas las propiedades que desea vincular. ¿Es esta una opción? Si está atascado con 1.1 (ya que menciona HashTable
lugar de Dictionary<,>
), entonces use ArrayList
.
Ejemplo (en C #):
class MyData
{
public int Key { get; set; }
public string Text { get; set; }
}
[STAThread]
static void Main()
{
var data = new List<MyData>
{
new MyData { Key = 1, Text = "abc"},
new MyData { Key = 2, Text = "def"},
new MyData { Key = 3, Text = "ghi"},
};
ComboBox cbo = new ComboBox
{
DataSource = data,
DisplayMember = "Text",
ValueMember = "Key"
};
cbo.SelectedValueChanged += delegate {
Debug.WriteLine(cbo.SelectedValue);
};
Application.Run(new Form {Controls = {cbo}});
}
En vb.net / winforms, ¿cómo se puede vincular una tabla hash a una lista desplegable o a cualquier otro control controlado por origen de datos?
Solo use la propiedad Datasource de la lista desplegable
DropDownList dd = new DropDownList();
Hashtable mycountries = New Hashtable();
mycountries.Add("N","Norway");
mycountries.Add("S","Sweden");
mycountries.Add("F","France");
mycountries.Add("I","Italy");
dd.DataSource=mycountries;
dd.DataValueField="Key";
dd.DataTextField="Value";
dd.DataBind();
Ejemplo para un objeto dado llamado Orden:
List<Order> list = new List<Order>{};
foreach (Order o in OOS.AppVars.FinalizedOrders.Values)
{
list.Add(o);
}
this.comboBox_Orders.DataSource = list;
this.comboBox_Orders.DisplayMember = "Description";
Lo bueno de esto es que puedes recuperar los datos de la lista como el objeto original (no solo el campo de valor como en asp.net).
Order order = (Order)this.comboBox_Orders.SelectedValue;
Utilice .tolist. también funciona para tipos complejos devueltos que obtienes de vistas / procedimientos almacenados en el marco de la entidad
Y, si usa Dictionary como fuente de datos, puede usar
MyDDL.Datasouce = myDict.ToList();
y lo convertirá en un tipo de lista.
myCtrl.DataSource = myHashtable
myCtrl.DataBind()
Fuente de ejemplo de control enlazable:
<itemtemplate>
<%# DataBinder.Eval(Container.DataItem, "Key", "<td>{0}</td>") %>
<%# DataBinder.Eval(Container.DataItem, "Value", "<td>${0:f2}</td>") %>
</itemtemplate>