質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

10717閲覧

WPFのDataGrid内にコンボボックスを動的に生成する方法

yisland

総合スコア28

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

1クリップ

投稿2015/09/02 00:52

編集2015/09/02 02:37

環境
VB
WPF

WPFのDataGrid内に動的に生成したコンボボックスを表示させる方法が分かりません。
どなたか分かる方がいらしたら教えて頂きたいです。

追加

<Window x:Class="Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window2" Height="383" Width="666"> <StackPanel Orientation="Vertical"> <DataGrid Grid.Row="1" Name="DataGrid1" AutoGenerateColumns="False" Height="300" > <DataGrid.Columns> <DataGridTemplateColumn> <DataGridTemplateColumn.Header> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Label Grid.Row="0" Grid.RowSpan="2" Content="てすと1" /> </Grid> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Label Grid.Row="0" Grid.RowSpan="2" Content="{Binding Test1}" /> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn> <DataGridTemplateColumn.Header> <DataGridColumnHeader> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Label Grid.Row="0" Content="てすと2" /> <Label Grid.Row="1" Content="てすと3" /> </Grid> </DataGridColumnHeader> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Label Grid.Row="0" Content="{Binding Test2}" /> <Label Grid.Row="1" Content="{Binding Test3}" /> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn> <DataGridTemplateColumn.Header> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Label Grid.Row="0" Grid.RowSpan="2" Content="コンボボックス" /> </Grid> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <ComboBox Name="comboTest" /> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </StackPanel> </Window>

ViewModelでDataGridのItemsSourceにどうやって設定すればいいのかが分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/09/02 00:53

「動的に生成したコンボボックスを表示させる」についてもう少し明確に記載をお願いします。 どの点が動的なのでしょうか。
yisland

2015/09/02 01:01

DBから情報を取得してリストにしたいです。
daichan

2015/09/02 01:52

DataGridとコンボボックスの関係をもう少し具体的に書いていただけないでしょうか。 ・コンボボックスのあるセルの列を追加したい? ・コンボボックスのあるセルを含む行を追加したい?
yisland

2015/09/02 01:56

コンボボックスのあるセルを含む行を追加したいです
guest

回答2

0

ベストアンサー

DB云々のところはViewModel内で適宜読み替えてください。
また、型をStringとしていますので独自型に適宜変更することになるでしょう。

XAML

1<Window x:Class="MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:local="clr-namespace:WpfApplication1" 5 Title="MainWindow" Height="350" Width="525"> 6 <Window.DataContext> 7 <local:MainWindowViewModel /> 8 </Window.DataContext> 9 <StackPanel Orientation="Vertical"> 10 <DataGrid Grid.Row="1" ItemsSource="{Binding GridItems}" 11 Name="DataGrid1" AutoGenerateColumns="False" Height="300" > 12 <DataGrid.Columns> 13 <DataGridTemplateColumn> 14 <DataGridTemplateColumn.Header> 15 <Grid> 16 <Grid.RowDefinitions> 17 <RowDefinition /> 18 <RowDefinition /> 19 </Grid.RowDefinitions> 20 <Label Grid.Row="0" Grid.RowSpan="2" Content="てすと1" /> 21 </Grid> 22 </DataGridTemplateColumn.Header> 23 <DataGridTemplateColumn.CellTemplate> 24 <DataTemplate> 25 <Grid> 26 <Grid.RowDefinitions> 27 <RowDefinition /> 28 <RowDefinition /> 29 </Grid.RowDefinitions> 30 <Label Grid.Row="0" Grid.RowSpan="2" Content="{Binding Test1}" /> 31 </Grid> 32 </DataTemplate> 33 </DataGridTemplateColumn.CellTemplate> 34 </DataGridTemplateColumn> 35 <DataGridTemplateColumn> 36 <DataGridTemplateColumn.Header> 37 <DataGridColumnHeader> 38 <Grid> 39 <Grid.RowDefinitions> 40 <RowDefinition /> 41 <RowDefinition /> 42 </Grid.RowDefinitions> 43 <Label Grid.Row="0" Content="てすと2" /> 44 <Label Grid.Row="1" Content="てすと3" /> 45 </Grid> 46 </DataGridColumnHeader> 47 </DataGridTemplateColumn.Header> 48 <DataGridTemplateColumn.CellTemplate> 49 <DataTemplate> 50 <Grid> 51 <Grid.RowDefinitions> 52 <RowDefinition /> 53 <RowDefinition /> 54 </Grid.RowDefinitions> 55 <Label Grid.Row="0" Content="{Binding Test2}" /> 56 <Label Grid.Row="1" Content="{Binding Test3}" /> 57 </Grid> 58 </DataTemplate> 59 </DataGridTemplateColumn.CellTemplate> 60 </DataGridTemplateColumn> 61 <DataGridTemplateColumn> 62 <DataGridTemplateColumn.Header> 63 <Grid> 64 <Grid.RowDefinitions> 65 <RowDefinition /> 66 <RowDefinition /> 67 </Grid.RowDefinitions> 68 <Label Grid.Row="0" Grid.RowSpan="2" Content="コンボボックス" /> 69 </Grid> 70 </DataGridTemplateColumn.Header> 71 <DataGridTemplateColumn.CellTemplate> 72 <DataTemplate> 73 <Grid> 74 <Grid.RowDefinitions> 75 <RowDefinition /> 76 <RowDefinition /> 77 </Grid.RowDefinitions> 78 <ComboBox Name="comboTest" 79 ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.ComboItems}"/> 80 </Grid> 81 </DataTemplate> 82 </DataGridTemplateColumn.CellTemplate> 83 </DataGridTemplateColumn> 84 </DataGrid.Columns> 85 </DataGrid> 86 </StackPanel> 87</Window>

VB.NET

1Class ViewModelBase 2 Implements INotifyPropertyChanged 3 4 Protected Sub RaisePropertyChanged(propertyName As String) 5 RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) 6 End Sub 7 Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged 8End Class 9 10Class MainWindowViewModel 11 Inherits ViewModelBase 12 13 Public Sub New() 14 Dim tmpGrid = New List(Of String) 15 tmpGrid.Add("A") 16 tmpGrid.Add("B") 17 tmpGrid.Add("C") 18 Dim tmpCombo = New List(Of String) 19 tmpCombo.Add("A") 20 tmpCombo.Add("B") 21 tmpCombo.Add("C") 22 GridItems = tmpGrid 23 ComboItems = tmpCombo 24 End Sub 25 26 Private _GridItems As List(Of String) 27 Public Property GridItems() As List(Of String) 28 Get 29 Return _GridItems 30 End Get 31 Set(ByVal value As List(Of String)) 32 _GridItems = value 33 RaisePropertyChanged("GridItems") 34 End Set 35 End Property 36 37 Private _ComboItems As List(Of String) 38 Public Property ComboItems() As List(Of String) 39 Get 40 Return _ComboItems 41 End Get 42 Set(ByVal value As List(Of String)) 43 _ComboItems = value 44 RaisePropertyChanged("ComboItems") 45 End Set 46 End Property 47End Class

投稿2015/09/02 02:51

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yisland

2015/09/03 06:38

参考になりました。 ありがとうございます。
guest

0

こんにちは。

WPFとのことですが、MVVMについては理解・使用されますでしょうか。

WPFのDataGrid内に動的に生成したコンボボックスを表示させる方法が分かりません

ViewModelでDataGridのItemsSourceへバインドさせるリストを保持します。
そのそれぞれの子要素にDataGrid各行のリストボックス.ItemsSourceへバインドさせるリストを保持します。
リストボックス内容がマスタデータなどであれば、View側でDataContextを検索して別途設定します。

今時点ではこの程度の回答しかできませんので、現在どこまで実装できてどこがわからないので
提示してください。

まずはDataGridのConboBoxを表示させるところまで。
これをたたき台にやりたいことを明記して頂けると。

XAML

1<Window x:Class="WpfApplication2.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:sys="clr-namespace:System;assembly=mscorlib" 5 Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 6 <Window.Resources> 7 <x:Array x:Key="hogeList" Type="sys:String"> 8 <sys:String>1</sys:String> 9 <sys:String>2</sys:String> 10 </x:Array> 11 </Window.Resources> 12 <Grid> 13 <DataGrid ItemsSource="{StaticResource hogeList}"> 14 <DataGrid.Columns> 15 <DataGridTextColumn Header="AAA" /> 16 <DataGridComboBoxColumn Header="BBB" /> 17 </DataGrid.Columns> 18 </DataGrid> 19 </Grid> 20</Window>

投稿2015/09/02 01:52

編集2015/09/02 02:02
Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問