DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewComboBoxColumnの使い方

環境/言語:[WinXP VB2005Express Sqlserver2005Express]
分類:[.NET]

いつもお世話になっております。
早速ですがDataGridViewComboBoxColumnの使い方について質問させてください。
http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html
を参考にさせていただき下記コードを作成実行したところエラーは出ないのですがどこにもコンボボックスが作成されません。
いろいろ検索はしたのですがなかなか答えにたどりつかず質問させていただくことにしました。

Dim Cn As SqlConnection = New SqlConnection("  ")
Dim SQLCm As SqlCommand = Cn.CreateCommand
Dim Adapter As SqlDataAdapter = New SqlDataAdapter(SQLCm)
Dim dt As DataTable = New DataTable
Dim sql As String = ""

sql = "SELECT tbl_SDロス.SDロスID,tbl_SDロス.SDロス名,tbl_SDロス入力.SDロス時間,tbl_SDロス入力.入力日, tbl_SDロス入力.社員ID, tbl_SDロス入力.職場ID "
sql &= "FROM tbl_SDロス LEFT OUTER JOIN "
sql &= "tbl_SDロス入力 ON tbl_SDロス.SDロスID = tbl_SDロス入力.SDロスID "
sql &= "WHERE (dbo.tbl_SDロス入力.入力日 ='" & Now.ToString("d") & "') AND (tbl_SDロス入力.社員ID = 4) "
sql &= "ORDER BY tbl_SDロス.SDロスID"

'DataGridViewComboBoxColumnを作成
Dim column As New DataGridViewComboBoxColumn()
Dim col_SQLCm As SqlCommand = Cn.CreateCommand
Dim col_Adapter As SqlDataAdapter = New SqlDataAdapter(col_SQLCm)
Dim column_dt As New DataTable
SQLCm.CommandText = "SELECT * FROM tbl_SDロス"
Adapter.Fill(column_dt)
With column
.DataSource = column_dt
.DataPropertyName = "SDロスID"
.DisplayStyleForCurrentCellOnly = True
.Name = "SDロスID"
End With

SQLCm.CommandText = sql
Adapter.Fill(dt)
Me.dgv_SDロス.DataSource = dt
With Me.dgv_SDロス
'"Week"列の代わりにComboBox列を表示する
.Columns.Insert(Me.dgv_SDロス.Columns(0).Index, column)
.Columns.Remove("SDロスID")
End With

すごい見当違いの事をしてるのかも知れませんが今の私の実力ではここまでで精一杯です。
申しわけありませんがご指導お願いいたします。
■No24041に返信(hoidoさんの記事)
>     sql &= "WHERE (dbo.tbl_SDロス入力.入力日 ='" & Now.ToString("d") & "') AND (tbl_SDロス入力.社員ID = 4) "

上記、Now.ToString("d") のような記述を行ってはいけません。

"2009/02/19" のような文字列が返されることを期待しているのかと
思いますが、OS 側の地域設定が「和暦」モードに設定されていた場合、
"21/02/19" という文字列になってしまうからです。

日付を文字列化するのであれば、
 (案1) VB 側で、IFormatProvider を指定して文字列化する。
 (案2) パラメータクエリにして日付型のまま渡し、SQL 側で文字列変換する。
などの方法を取った方が良いかと。


> どこにもコンボボックスが作成されません。
コードを実行していないので、憶測ですが:

> Dim column As New DataGridViewComboBoxColumn()
> With column
>    .Name = "SDロスID"
> End With
まず、ここでコンボボックス列を作成して、その後…

> With Me.dgv_SDロス
>    .Columns.Insert(Me.dgv_SDロス.Columns(0).Index, column)
>    .Columns.Remove("SDロスID")
> End With
ここでそれを 0 列目に挿入しているのですが、その直後、
その Name を持つ列を Remove しているように見えます。

最後の Remove を除去したら、どうなりますか?
魔界の仮面弁士さま早々の回答ありがとうございます。
抽出条件の間違いまで指摘していただきありがとうございます。
早速修正したいと思います。

また問題だったコンボボックスの表示も出来ました。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板