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

DataGridでComboboxをのせる方法

環境/言語:[VB.NET]
分類:[.NET]

いつもお世話になっております。
DataGridでComboBoxを使うを見させていただきました。
その中で単純にDataGridコントロールにComboBoxコントロールをのせる方法の
リンク先が見れなかったのでそのやり方を教えていただけないでしょうか?

宜しくお願い致します。
> その中で単純にDataGridコントロールにComboBoxコントロールをのせる方法の
> リンク先が見れなかったのでそのやり方を教えていただけないでしょうか?

323167 - [HOWTO] Windows フォームの DataGrid コントロールに ComboBox コントロールを追加する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;323167

のことですね。Googleで調べてみたところ、かろうじて中国語のページだけ残っていました。

323167 - HOW TO:将 ComboBox 控件添加到 Windows 窗体 DataGrid 控件
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;323167

これもいつ消えるか分からないので、コードの部分だけ引用させていただきます。多分消えたということは、いろいろ問題があったんでしょうね。(いきなり消えるのは困ったものです。)

Imports System.Data.SqlClient
Imports System.Windows.Forms


Public MyCombo As New ComboBox()
Dim con As New SqlConnection("server=myservername;uid=myid;pwd=mypassword;database=northwind")
Dim daEmp As New SqlDataAdapter("Select * From Employees", con)

Public ds As New DataSet()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler MyCombo.TextChanged, AddressOf Ctrls_TextChanged
'Fill ComboBox list.
MyCombo.Name = "MyCombo"
MyCombo.Visible = False
MyCombo.Items.Clear()
MyCombo.Items.Add("Sales Representative")
MyCombo.Items.Add("Inside Sales Coordinator")
MyCombo.Items.Add("Vice President, Sales")
MyCombo.Items.Add("Sales Manager")
MyCombo.Items.Add("Flunky")


daEmp.Fill(ds, "Employees")

'Set the RowHeight of the DataGrid to the height of the ComboBox.
DataGrid1.PreferredRowHeight = MyCombo.Height

DataGrid1.DataSource = ds

DataGrid1.DataMember = "Employees"
'Add ComboBox to the Control collection of the DataGrid.
DataGrid1.Controls.Add(MyCombo)
End Sub

Private Sub DataGrid1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGrid1.Paint
If DataGrid1.CurrentCell.ColumnNumber = 3 Then
MyCombo.Width = DataGrid1.GetCurrentCellBounds.Width
End If
End Sub

Private Sub Ctrls_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
If DataGrid1.CurrentCell.ColumnNumber = 3 Then
MyCombo.Visible = False
If DataGrid1.Item(DataGrid1.CurrentCell) & "" = "" Then
SendKeys.Send("*")
End If
DataGrid1.Item(DataGrid1.CurrentCell) = MyCombo.Text
End If
End Sub

Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
If DataGrid1.CurrentCell.ColumnNumber = 3 Then
MyCombo.Visible = False
MyCombo.Width = 0
MyCombo.Left = DataGrid1.GetCurrentCellBounds.Left
MyCombo.Top = DataGrid1.GetCurrentCellBounds.Top
MyCombo.Text = DataGrid1.Item(DataGrid1.CurrentCell) & ""
MyCombo.Visible = True
Else
MyCombo.Visible = False
MyCombo.Width = 0
End If
End Sub

Private Sub DataGrid1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll
MyCombo.Visible = False
MyCombo.Width = 0
End Sub

Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
MyCombo.Visible = False
MyCombo.Width = 0
End Sub
お返事ありがとうございます。
私も調べてみたのですが調べが甘かったのかみつかりませんでした。
参考にさせていただきます。

どうもありがとうございました。

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