- PR -

DataGridViewのColumnTypeを動的に設定したい

投稿者投稿内容
ピン
会議室デビュー日: 2007/05/16
投稿数: 18
投稿日時: 2007-05-16 10:20
お世話になります。

.netのDataGridViewで列のColumnTypeを動的に設定したいです。
例えば、元になる情報(テキストなど)を読み込みあるときは
1列(カラム)目がテキストボックス
2列(カラム)目がチェックボックス
あるときは
1列(カラム)目がチェックボックス
2列(カラム)目がコンボボックス
というようにデザイナで固定でColumnTypeを指定するのではなくコードで
設定したいのですが、

DataGridView1.Columns(i).XXXのあとに「ColumnType」のプロパティが出てきません。
コードで設定することは不可能なのでしょうか?

どなたかご教授ください。



[ メッセージ編集済み 編集者: ピン 編集日時 2007-05-16 10:21 ]

[ メッセージ編集済み 編集者: ピン 編集日時 2007-05-16 10:22 ]

[ メッセージ編集済み 編集者: ピン 編集日時 2007-05-16 10:23 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-05-16 10:47
引用:

http://msdn2.microsoft.com/ja-jp/library/053656ss(VS.80).aspx

ColumnType プロパティは、デザイン時のみのプロパティで、列の種類を表すクラスを示します。これは列クラス内に定義される実際のプロパティではありません。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-05-16 10:54
DataGridViewColumnCollection.Add で追加することはできますね。
ピン
会議室デビュー日: 2007/05/16
投稿数: 18
投稿日時: 2007-05-16 12:13
KIさん
じゃんぬねっとさん

返答ありがとうございます。

DataGridViewColumnCollection.Add で追加する事は出来きましたが、項目数が変動するため
その数だけインスタンスを宣言しなければならないようです。

<例>*********************************************
項目数が3つだった場合
    Dim typeComboBox As New Windows.Forms.DataGridViewComboBoxColumn()
Dim typeTextBox1 As New Windows.Forms.DataGridViewTextBoxColumn()
Dim typeTextBox2 As New Windows.Forms.DataGridViewTextBoxColumn()

↑のように3つインスタンスを作らなければならない

DataGridView1.Columns.Add(typeComboBox)
DataGridView1.Columns.Add(typeTextBox1)
DataGridView1.Columns.Add(typeTextBox2)

***********************************************************

理想は
    Dim typeComboBox As New Windows.Forms.DataGridViewComboBoxColumn()
Dim typeTextBox As New Windows.Forms.DataGridViewTextBoxColumn()
     ・
     ・
     ・

↑型は一種類ずつ宣言

DataGridView1.Columns.Add(typeComboBox) ※
DataGridView1.Columns.Add(typeTextBox)  ※
DataGridView1.Columns.Add(typeTextBox)  ※

    実際の※部分はループ処理

という風にしたいのですが、これは無理ですよね・・・。


KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-05-16 13:06
引用:

DataGridViewColumnCollection.Add で追加する事は出来きましたが、項目数が変動するため
その数だけインスタンスを宣言しなければならないようです


もちろんその通りですし、それが普通だと思います。
逆に

引用:

DataGridView1.Columns.Add(typeComboBox) ※
DataGridView1.Columns.Add(typeTextBox)  ※
DataGridView1.Columns.Add(typeTextBox)  ※


これができたと仮定しての話ですが、こっちの方が違和感ありませんか?


同じ DataGridViewTextBoxColumn でも、2つの列は全く別物ですから、
別のインスタンスにすべきと思います。
ピン
会議室デビュー日: 2007/05/16
投稿数: 18
投稿日時: 2007-05-16 15:08
ありがとうございます。

以下のようにしました。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Dim ColmunType() As Windows.Forms.DataGridViewColumn

ReDim ColmunType(n) ←nはカラムの数
 For i As Integer = 0 To n
  Select Case wk_type_text(i) ←型が入っているワーク
   Case "text"
    ColmunType(i) = New Windows.Forms.DataGridViewTextBoxColumn
   Case "combo"
    ColmunType(i) = New Windows.Forms.DataGridViewComboBoxColumn
   Case "check"
    ColmunType(i) = New Windows.Forms.DataGridViewCheckBoxColumn
  End Select

  'タイプを設定
  DataGridView1.Columns.Add(ColmunType(i))
 Next
 
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

またの時はお願いいたします。。助かりました。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-05-16 15:48
本題とは関係のない話になりますが、
コードで気になった点を1つだけ指摘しておきます。

配列変数 ColmunType は、ワーク変数として使っているだけでしたら
配列にする必要はありません。

コード:

For i As Integer = 0 To n

    Dim ColmunType As Windows.Forms.DataGridViewColumn  'ここで宣言
    Select Case wk_type_text(i)
        Case "text" 
            ColmunType = New Windows.Forms.DataGridViewTextBoxColumn 
        Case "combo" 
            ColmunType = New Windows.Forms.DataGridViewComboBoxColumn 
        Case "check" 
            ColmunType = New Windows.Forms.DataGridViewCheckBoxColumn 
    End Select

    'タイプを設定 
    DataGridView1.Columns.Add(ColmunType) 
Next


ピン
会議室デビュー日: 2007/05/16
投稿数: 18
投稿日時: 2007-05-16 17:44
引用:

KIさんの書き込み (2007-05-16 15:48) より:
本題とは関係のない話になりますが、
コードで気になった点を1つだけ指摘しておきます。

配列変数 ColmunType は、ワーク変数として使っているだけでしたら
配列にする必要はありません。




はい。了解しました。ありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)