Converter um array de objeto []
-
22-07-2019 - |
Pergunta
Eu estou trabalhando em um aplicativo winforms que usa Sybase Datawindow.net. Basicamente, eu tenho uma DataWindow que os dados Recupera (dw_retailer.Retrieve (id)) eo que eu voltar é uma lista de objetos. DataWindow si excists de rótulos e caixas de texto e eu ligar os dados como este
newRetailer.foto1 = ((object[])(dataWindowControl.PrimaryData.Rows[0]))[7].ToString();
newRetailer.foto2 = ((object[])(dataWindowControl.PrimaryData.Rows[0]))[6].ToString();
O que eu quero fazer agora é colocar uma string em uma lista de objeto [] como este
((object[])(_targetForm.dw_retailer.PrimaryData.Rows[0]))[5] = retailer.text;
Mas, obviamente, isso não funciona.
((object[])(_targetForm.dw_retailer.PrimaryData.Rows[0])).SetValue(retailer.text,5);
Esse trabalho doenst quer (índice fora do intervalo) altho tem 9 objetos
_targetForm.dw_retailer.PrimaryData.Rows[0] {object[9]} object {object[]}
Tentou fazê-lo assim também
Array arrayList = _targetForm.dw_retailer.PrimaryData.Rows.ToArray();
arrayList.SetValue(retailer.text, 0,5);
matriz não é multidimensional. Porque eu preciso dos objetos no objeto assim que eu preciso arrayList [0] [5] mas que o trabalho doenst quer.
Eu não sei mesmo se é apenas um ajuste eu tenho que selecionar na Aplicação DataWindow Designer. Como faço para converter a matriz de objeto [] para que eu possa colocá-lo de volta nos _targetForm.dw_retailer.PrimaryData.Rows. Será que é mesmo possível editar os DataWindows?
Ainda não está funcionando Marc
IList list = ((IList)(_targetForm.dw_retailer.PrimaryData.Rows[0]));
list[5] = retailer.text;
retailer.text tem o "tekst" valor lista [5] não é alterada.
Não é adicionando exatamente um item, mais como editting um. Sobre o índice fora da faixa, eu sei que há apenas 8 itens na lista, é por isso que acho estranho que o quinto é o índice para fora ou gama. Talvez eu só não entendo .SetValue () que bem.
Obrigado pela IList tho! Mas como faço para converter parte de trás IList a objeto []?
Solução
_targetForm.dw_retailer.SetColumn(6);
_targetForm.dw_retailer.SetText(retailer.text);
_targetForm.dw_retailer.SetColumn(9);
_targetForm.dw_retailer.SetText(retailer.webname);
Primeiro você tem que ativar o controle que deseja editar com SetColumn e depois chamar SetText.
Agora todo mundo sabe!
Outras dicas
Re: lista convertendo para objeto, você pode simplesmente fazer isso da maneira manual:
object[] objs = new object[list.count];
for (int i=0; i < list.Count; i++) {
objs[i] = list[i];
}
É um pouco gauche, mas sua intenção é clara e ele vai funcionar: -).
Você diz que é uma "lista de objetos"; em vez de se fixar em object[]
, como sobre o IList
não-genérico?
((IList)(_targetForm.dw_retailer.PrimaryData.Rows[0]))[5] = retailer.text;
Isso deve apoiar matrizes, listas, etc.
Re o índice-out-of-range; C # índices são quase sempre baseado em zero, então se você tem 9 itens na lista, o último item é array[8]
. Se você quiser Adicionar um item, é o preferido IList
: list.Add(foo)
Isto não pode responder à sua pergunta direta, mas eu acho que pode resolver a sua intenção. O controlo DataWindow tem métodos GetItem () e SetItem () especificamente para alterar os dados dentro dos tampões. Com esses, você não teria que se preocupar com uma matriz de objetos em tudo.