C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 列コレクションメンバの配列


(過去ログ 26 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■12056 / inTopicNo.1)  列コレクションメンバの配列
  
□投稿者/ OGAKUZU (1回)-(2007/12/28(Fri) 14:29:52)

分類:[C#] 

VS 2005 C#

DataSetの下のTablesコレクションの下のColumnsコレクションの下のメンバに配列を用いることはできますでしょうか?

イメージとしては、

 メンバ
  0 Column1
  1 Column2
  2 Column3[40] ←
  3 Column4

こんな感じです。

方法がありましたらご指導ください。

引用返信 編集キー/
■12057 / inTopicNo.2)  Re[1]: 列コレクションメンバの配列
□投稿者/ ぽぴ王子 (316回)-(2007/12/28(Fri) 14:37:53)
ぽぴ王子 さんの Web サイト
No12056 (OGAKUZU さん) に返信

> DataSetの下のTablesコレクションの下のColumnsコレクションの下のメンバに配列を用いることはできますでしょうか?

できません。


…とだけ書くとちょっと不親切なので。
質問するときは目的だけ書くんじゃなくて、なぜそういったことができるか疑問に思ったのか、なぜそういったことをしたいと思ったのか
などを具体的に書くといいと思います。
ちなみに「Columnsコレクション」と書いているわけで、コレクション自体が配列『のように』扱えることを知っていれば、こういった
疑問は起こらなかったような気がするので、たぶんに OGAKUZU さんはコレクションについて誤解されているように思います。
コレクションについてもうちょっと調べてみるといいんじゃないでしょうか。
引用返信 編集キー/
■12058 / inTopicNo.3)  Re[2]: 列コレクションメンバの配列
□投稿者/ OGAKUZU (2回)-(2007/12/28(Fri) 15:54:10)
ぽぴ王子さん、ありがとうございました。

> なぜそういったことをしたいと思ったのかなどを具体的に書くといいと思います。

配列にしたいと思ったのは、40個の要素(Column3[0]〜[39])に共通のプロパティを使用し
かつ、コード内で

for(i = 0; i < 40; i++)
{
  Column3[i] = yyy[i];
}

のように、ひとくくりに扱いたかったためです。

配列として(あるいは配列のように)扱うことができなければ

メンバ
  0 Column1
  1 Column2
  2 Column3-0 ←
  3 Column3-1 ←
    :
  42 Column3-39 ←
  43 Column4

のように定義する必要があり、そのため、40個の要素各々にプロパティを
設定しなければならず、コードも

  Column3-0 = yyy[0];
  Column3-1 = yyy[1];
    :
  Column3-39 = yyy[39];

のように沢山書かなければならなくなってしまうと考えました。

> コレクションについてもうちょっと調べてみるといいんじゃないでしょうか。

コレクションについては、初心者のため知らないことが沢山ありますので
勉強して解決策を模索してみようと思います。

ご指導ありがとうございました。

引用返信 編集キー/
■12059 / inTopicNo.4)  Re[3]: 列コレクションメンバの配列
□投稿者/ ぽぴ王子 (317回)-(2007/12/28(Fri) 16:40:17)
ぽぴ王子 さんの Web サイト
No12058 (OGAKUZU さん) に返信

説明ありがとうございます。

> 配列にしたいと思ったのは、40個の要素(Column3[0]〜[39])に共通のプロパティを使用し
> かつ、コード内で
> 
> for(i = 0; i < 40; i++)
> {
>   Column3[i] = yyy[i];
> }
> 
> のように、ひとくくりに扱いたかったためです。

たぶんそのような意図なのではないかとは思いましたが、勝手にこちらで想像するのも
よくないかと思いましたので、説明をお願いしました。
(相手が自分と同じ理解を持っているわけではないですからね)

で。
そのような場合であれば、DataTable.Columns プロパティを利用することができると思います。
DataTable.Columns プロパティは DataColumnCollection クラスです。DataColumnCollection
クラスは一般的なコレクションクラスと同じように、インデックスまたは名前を使って内部の
DataColumn クラスにアクセスすることができます。

難しい説明はこれぐらいにして、具体的な方法。

> メンバ
>   0 Column1
>   1 Column2
>   2 Column3 ←
>   3 Column4 ←
>     :
>   41 Column42 ←
>   42 Column43

となっていた場合(Column3〜Column42をループでアクセスしたい場合)は、以下のコードでできます。

DataSet ds;
(((ds にデータを読み込む処理    中身は省略)))
for(i = 0; i < 40; i++)
{
    ds.Tables[0].Columns[2 + i] = yyy[i];
}

インデックスを使わずに名前を使う方法もあります。

DataSet ds;
(((ds にデータを読み込む処理    中身は省略)))
for(i = 0; i < 40; i++)
{
    ds.Tables[0].Columns[string.Format("Columns{0}", 3 + i)] = yyy[i];
}

かなり手抜きをしていますが、これでわかるでしょうか。
このコードが何をしているのかを理解してから使ってみると、上達が早いかもしれません。
(コレクションの勉強ついでに調べてみてください)

引用返信 編集キー/
■12066 / inTopicNo.5)  Re[4]: 列コレクションメンバの配列
□投稿者/ OGAKUZU (3回)-(2007/12/28(Fri) 21:13:12)
「コレクション自体が配列『のように』扱える」ということが、おおよそ理解できたようです。

メンバ
  0 Column1
  1 Column2
  2 Column3_0 ←
  3 Column3_1 ←
    :
  41 Column3_39 ←
  42 Column4

// プロパティをひとくくりに扱う
DataSet ds = dataSetOGAKUZU;
for (i = 0; i < 40; i++)
{
  ds.Tables[0].Columns[string.Format("Column3_{0}", i)].DataType =
    System.Type.GetType("System.Double");
}

// データをひとくくりに扱う
DataSet ds = dataSetOGAKUZU;
for (i = 0; i < 40; i++)
{
  ds.Tables[0].Rows[0][string.Format("Column3_{0}", i)] = yyy[i];
}

ぽぴ王子さん、ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -