将数组转换为object []

时间:2009-01-14 09:02:14

标签: c# sybase datawindow

我正在使用Sybase Datawindow.net的winforms应用程序。基本上我有一个检索数据的数据窗口(dw_retailer.Retrieve(id)),我得到的是一个对象列表。数据窗口本身就是标签和文本框,我就像这样绑定数据

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

我现在要做的是将一个字符串放入object []列表中,如下所示

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

但显然这不起作用。

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

那也是最好的工作(索引超出范围),尽管它有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 Designer应用程序中选择的设置。如何将数组转换为object [],以便将其放回_targetForm.dw_retailer.PrimaryData.Rows中。甚至可以编辑数据窗口吗?


仍然没有工作Marc

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

retailer.text的值为“tekst” list [5]没有变化。

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

感谢IList!但是如何将IList转换回object []?

4 个答案:

答案 0 :(得分:1)

Re:将列表转换为对象,您可以手动执行:

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

这有点夸张,但它的意图很清楚,它会起作用: - )。

答案 1 :(得分: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。

现在每个人都知道!

答案 2 :(得分:0)

你说它是一个“对象列表”;而不是注意object[],非通用IList怎么样?

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

那应该支持数组,列表等。

重新指数超出范围; C#索引几乎总是从零开始,因此如果列表中有9个项目,则最后一项为array[8]。如果您要添加项目,则首选IListlist.Add(foo)

答案 3 :(得分:0)

这可能无法解答您的直接问题,但我认为这可能会解决您的意图。 DataWindow控件具有专门用于更改缓冲区内数据的GetItem()和SetItem()方法。有了这些,您根本不必担心一系列对象。