Convertir una matriz a objeto []
-
22-07-2019 - |
Pregunta
Estoy trabajando en una aplicación winforms que utiliza Sybase Datawindow.net. Básicamente tengo una ventana de datos que recupera datos (dw_retailer.Retrieve (id)) y lo que obtengo es una lista de objetos. La ventana de datos en sí misma elimina las etiquetas y los cuadros de texto y ato los datos de esta manera
newRetailer.foto1 = ((object[])(dataWindowControl.PrimaryData.Rows[0]))[7].ToString();
newRetailer.foto2 = ((object[])(dataWindowControl.PrimaryData.Rows[0]))[6].ToString();
Lo que quiero hacer ahora es poner una cadena en la lista de objetos [] como esta
((object[])(_targetForm.dw_retailer.PrimaryData.Rows[0]))[5] = retailer.text;
Pero obviamente eso no funciona.
((object[])(_targetForm.dw_retailer.PrimaryData.Rows[0])).SetValue(retailer.text,5);
Que tampoco funciona (índice fuera de rango) aunque tiene 9 objetos
_targetForm.dw_retailer.PrimaryData.Rows[0] {object[9]} object {object[]}
Intenté así también
Array arrayList = _targetForm.dw_retailer.PrimaryData.Rows.ToArray();
arrayList.SetValue(retailer.text, 0,5);
La matriz no es multidimensional. Como necesito los objetos en el objeto, necesito arrayList [0] [5] pero tampoco funciona.
Ni siquiera sé si es solo una configuración que debo seleccionar en la aplicación DataWindow Designer. ¿Cómo convierto la matriz en objeto [] para poder volver a colocarla en _targetForm.dw_retailer.PrimaryData.Rows? ¿Es posible editar las ventanas de datos?
Todavía no funciona Marc
IList list = ((IList)(_targetForm.dw_retailer.PrimaryData.Rows[0]));
list[5] = retailer.text;
retailer.text tiene el valor "tekst" La lista [5] no ha cambiado.
No es exactamente agregar un elemento, más bien como editar uno. Sobre el índice fuera de rango, sé que solo había 8 elementos en la lista, por eso me resulta extraño que el quinto sea índice o rango. Tal vez simplemente no entiendo .SetValue () tan bien.
¡Gracias por la lista! Pero, ¿cómo convierto el IList de nuevo en objeto []?
Solución
_targetForm.dw_retailer.SetColumn(6);
_targetForm.dw_retailer.SetText(retailer.text);
_targetForm.dw_retailer.SetColumn(9);
_targetForm.dw_retailer.SetText(retailer.webname);
Primero debe activar el control que desea editar con SetColumn y luego llamar a SetText.
¡Ahora todos lo saben!
Otros consejos
Re: convirtiendo la lista en objeto, puede hacerlo de forma manual:
object[] objs = new object[list.count];
for (int i=0; i < list.Count; i++) {
objs[i] = list[i];
}
Es un poco gauche, pero su intención es clara y funcionará :-).
Dices que es una " lista de objetos " ;; en lugar de fijarse en object []
, ¿qué tal el IList
no genérico?
((IList)(_targetForm.dw_retailer.PrimaryData.Rows[0]))[5] = retailer.text;
Eso debería admitir matrices, listas, etc.
Re el índice fuera de rango; Los índices de C # casi siempre están basados ??en cero, por lo que si tiene 9 elementos en la lista, el último elemento es array [8]
. Si desea agregar un elemento, se prefiere IList
: list.Add(foo)
Puede que esto no responda a su pregunta directa, pero creo que podría abordar su intención. El control DataWindow tiene métodos GetItem () y SetItem () específicamente para cambiar los datos dentro de los búferes. Con eso, no tendría que preocuparse por una variedad de objetos en absoluto.