2009-01-14 157 views
0

我正在使用Sybase Datawindow.net的Winforms应用程序。基本上我有一个数据窗口检索数据(dw_retailer.Retrieve(id)),我得到的是一个对象列表。标签和文本框的数据窗口本身excists和我结合这样将数组转换为对象[]

newRetailer.foto1 = ((object[])(dataWindowControl.PrimaryData.Rows[0]))[7].ToString(); 
newRetailer.foto2 = ((object[])(dataWindowControl.PrimaryData.Rows[0]))[6].ToString(); 

我想现在做的是把一个字符串转换为对象[]列表这样

((object[])(_targetForm.dw_retailer.PrimaryData.Rows[0]))[5] = retailer.text; 

但很明显的是,数据不工作。

((object[])(_targetForm.dw_retailer.PrimaryData.Rows[0])).SetValue(retailer.text,5); 

即doenst工作或者(索引超出范围)本书虽然它具有9个对象

_targetForm.dw_retailer.PrimaryData.Rows[0] {object[9]} object {object[]} 

试图像这样太

Array arrayList = _targetForm.dw_retailer.PrimaryData.Rows.ToArray(); 
      arrayList.SetValue(retailer.text, 0,5); 

阵列不是多维的。因为我需要对象中的对象,所以我需要arrayList [0] [5]但也可以工作。

我甚至不知道它是否只是我必须在DataWindow设计器应用程序中选择的设置。如何将数组转换为object [],以便将其放回到_targetForm.dw_retailer.PrimaryData.Rows中。它甚至可以编辑数据窗口吗?


仍然没有工作马克

IList list = ((IList)(_targetForm.dw_retailer.PrimaryData.Rows[0])); 
list[5] = retailer.text; 

retailer.text具有值 “tekst” 列表[5]是不变的。

它不是完全添加项目,更像是编辑项目。关于索引超出范围,我知道列表中只有8个项目,这就是为什么我觉得第五个是索引输出或范围很奇怪的原因。也许我只是不明白.SetValue()那么好。

感谢IList寿!但是,如何将IList转换回对象[]?

回答

1
_targetForm.dw_retailer.SetColumn(6); 
_targetForm.dw_retailer.SetText(retailer.text); 
_targetForm.dw_retailer.SetColumn(9); 
_targetForm.dw_retailer.SetText(retailer.webname); 

首先你必须激活你想用SetColumn编辑的控件,然后调用SetText。

现在大家都知道了!

0

你说这是一个“对象列表”;而不是固定在object[],非通用IList怎么样?

((IList)(_targetForm.dw_retailer.PrimaryData.Rows[0]))[5] = retailer.text; 

这应该支持阵列,列表等

重新索引-外的范围; C#索引几乎总是从零开始的,所以如果列表中有9个项目,最后一项是array[8]。如果你想添加项目,IList优先:list.Add(foo)

1

回复:转换列表中的对象,你可以只是做手工的方式:

object[] objs = new object[list.count]; 
for (int i=0; i < list.Count; i++) { 
    objs[i] = list[i]; 
} 

这是一个有点笨拙,但其意图是清楚的,它会工作:-)。

+0

这有点肮脏:)但谢谢你的信息! – Dean 2009-01-14 09:50:56

0

这可能不会回答你的直接问题,但我认为它可能会解决你的意图。 DataWindow控件具有专门用于更改缓冲区内数据的GetItem()和SetItem()方法。有了这些,你就不必担心一堆物体了。