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 []?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top