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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top