0

我正在开发一个使用 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。甚至可以编辑数据窗口吗?


仍然不工作马克

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

Retailer.text 的值 "tekst" list[5] 不变。

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

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

4

4 回答 4

1

回复:将列表转换为对象,您可以手动进行:

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

这有点粗俗,但它的意图很明确,它会起作用:-)。

于 2009-01-14T09:48:09.260 回答
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。

现在大家都知道了!

于 2009-01-14T10:31:04.257 回答
0

你说它是一个“对象列表”;而不是专注于object[],非泛型IList怎么样?

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

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

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

于 2009-01-14T09:13:27.487 回答
0

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

于 2009-05-08T22:17:02.047 回答