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[])(_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" リスト [5] は変更されていません。

正確にはアイテムを追加するのではなく、アイテムを編集するようなものです。範囲外のインデックスについては、リストに 8 つの項目しかないことを知っているので、5 番目が範囲外または範囲であることは奇妙に感じます。多分私は .SetValue() をよく理解していません。

IListありがとうございます!しかし、どうすれば IList を object[] に戻すことができるでしょうか?

4

4 に答える 4

1

Re: リストをオブジェクトに変換するには、手動で行うことができます:

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

これはあなたの直接の質問には答えないかもしれませんが、あなたの意図に対処できると思います。データウィンドウ コントロールには、特にバッファ内のデータを変更するための GetItem() および SetItem() メソッドがあります。これらを使用すると、オブジェクトの配列についてまったく心配する必要がなくなります。

于 2009-05-08T22:17:02.047 に答える