毎々参考にさせていただいております。
今更ながら、最近になってVisualStduio2005をはじめたのですが、DataGridView
で躓いてしまったので、ご教示いただければと質問させていただきます。
デザインモードにて、DataGridViewの3列目に下記の列を設定しました。
(Name) :"Column3"
ColumnType:DataGridViewComboBoxColumn
このあと、コード編集画面にて下記コードで実行しました。
Private Sub Form1_Load( ------------ 省略 ------------- )
Dim column As New DataGridViewComboBoxColumn
column.Items.Add("♂")
column.Items.Add("♀")
With Me.DataGridView1
.Columns.Insert(2,column) ----------------------- ①
End With
End Sub
これですと、デザイン時にコンボボックス列として設定した"Column3"の前に
①のコンボボックス(項目は"♂","♀")が配置されてしまい、その後に項目
が何もない"Column3"が表示されてしまいます。
(コードがそう書いてあるので、当たり前といえばそうなのですが、、)
目的の処理を実現するには、現状の私の知識では、
②①で列をInsertした後、後ろの"Column3"列を削除する。
③コードで最初の列から順にColumn.Addしていく。
しかない感じです。
デザイン側では列の型などを設定し、コード側では項目だけを設定するには、
どうしたらよろしいでしょうか?
どなたかご教示いただければ幸いです。よろしくお願いいたします。
> DataGridViewの指定行にコンボボックスを配置するには?
> DataGridViewの3列目に下記の列を設定しました。
うん?
「行」単位で配置したいのですか?
「列」単位で配置したいのですか?
列指定であれば、DataGridViewComboBoxColumn で良いですけど、
行指定やセル指定であれば、DataGridViewComboBoxCell です。
DataGridView1.AllowUserToAddRows = False
DataGridView1.RowCount = 5
DataGridView1.ColumnCount = 4
Dim cmb As New DataGridViewComboBoxCell()
cmb.Items.AddRange("aaa", "bbb", "ccc")
DataGridView1(1, 2) = cmb
> コード側では項目だけを設定するには、
こんな感じとか。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Column3.Items.Add("♂")
Column3.Items.Add("♀")
End Sub
# 上記の Column3 という部分は、列デザイナ画面で指定した Name にしてください。
魔界の仮面弁士さん、毎々お世話になっております。
>うん?
>「行」単位で配置したいのですか?
>「列」単位で配置したいのですか?
おっしゃるとおりです。
指定行ではなく、指定列でした。すみませんでした。
>Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
> Column3.Items.Add("♂")
> Column3.Items.Add("♀")
>End Sub
上の方(.AddRangeの方)も非常に参考になりましたが、今回はこちらの記述で
解決しました。まさにこれがやりたかったことです。
記述の仕方にこだわる必要も意味もなく、そこでとまってしまっては本末転倒
なのかもしれませんが、
●型とかの指定をデザイン画面で行い
●実際のデータだけコードで入れる
というスタイルで処理したかったため、助かりました。
>Column3.Items.Add
という部分を、"Me.DataGridView."のように、DataGridView内のものとして
ドットに続く部分で処理するのかと思いましたが、いきなり"Column3"で呼び
出せばできたのですね・・・。
"Me.DataGridView.Column3.Iitems.Add"というのはでてこなかったため、"?"
となってしまいました。
何はともあれ、ありがとうございました。精進させていただきます。
> "Me.DataGridView.Column3.Iitems.Add"というのはでてこなかったため、
> "?"となってしまいました。
DataGridView から辿るのであれば、Column3 は「列」のオブジェクトですから、
Me.Column3.Items.AddRange("♂", "♀")
のかわりに、
CObj(Me.DataGridView1.Columns(2)).Items.AddRange("♂", "♀")
もしくは
CObj(Me.DataGridView1.Columns("Column3")).Items.AddRange("♂", "♀")
のように、Columns プロパティ経由で書くことになります。
Option Strict On であれば、
DirectCast(Me.DataGridView1.Columns(2), DataGridViewComboBoxColumn).Items.AddRange("♂", "♀")
ですね。
# キャストが必要なので、IntelliSense に頼っていると見つけられないかも。
魔界の仮面弁士さん、お手数おかけします。
わざわざ追記していただいてありがとうございました。
今は意味がよくわからないのですが、ソースをよく見て意味を理解したいと
思います。
お返事が遅くなりすみませんでした。