こんにちはみんな..
私の考えは、DataGrid をマッパー テンプレートとして使用することです。まず、グリッドが「テーブル A」からデータをロードし、列の 1 つが「テーブル B」からのデータを表示します。
私はこのような「テーブルB」を持っています:
fieldtype_id | fieldtype_name
1 int
2 varchar
3 date
DataGridComboBoxColumn を使用して、このテーブルを wpf Datagrid に表示したいと考えています。
そのため、wpf ウィンドウとその中にデータグリッドを作成します。以下は XAML です。
<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="12,123,0,176" Name="dataGrid1" Width="1000"
ItemsSource="{Binding}" SelectionUnit="CellOrRowHeader" CanUserAddRows="False"
CellEditEnding="dataGrid1_CellEditEnding" CurrentCellChanged="dataGrid1_CurrentCellChanged">
<DataGrid.Columns>
<DataGridComboBoxColumn
Header="Field Type" Width="200"
DisplayMemberPath="Value"
SelectedValueBinding="{Binding fieldtypeSS, Mode=TwoWay}"
SelectedValuePath="{Binding fieldtype_id}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsSynchronizedWithCurrentItem" Value="False" />
<Setter Property="ItemsSource" Value="{Binding Path=fieldtype_id}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=fieldtype_id}" />
<Setter Property="IsDropDownOpen" Value="True" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
そして、私はクラスを作成します:
public class cMapHeader
{
public int fieldtypeSS { get; set; }
public Dictionary<string, string> fieldtype_id { get; set; }
}
次に、以前に作成したメソッドを使用してテーブルにデータを入力します
//## Get MysqlFieldType
//## dboperation.dtQueries is my method to populate data, and return as DataTable
Dictionary<string, string> mysqlFieldType = new Dictionary<string, string>();
foreach (DataRow row in dboperation.dtQueries("SELECT fieldtype_id, fieldtype_name FROM mysql_Fieldtype ").Rows)
{
mysqlFieldType.Add(row["fieldtype_id"].ToString(), row["fieldtype_name"] as string);
}
次に、グリッドを埋める
gridMapHeader = new ObservableCollection<cMapHeader>()
{
new cMapHeader(){fieldtypeSS="1",fieldtype_id=mysqlFieldType},
new cMapHeader(){fieldtypeSS="2",fieldtype_id=mysqlFieldType}
};
dataGrid1.BeginInit();
dataGrid1.SetBinding(ItemsControl.ItemsSourceProperty, new Binding
{
Source = gridMapHeader
});
問題になるのは、fieldtypeSS を含むセルが表示されないことですが、編集モードでは、DataGridComboBoxColumn が必要な値を正しく表示します (「テーブル B」の fieldtype_name のみが表示されます)。
次に、2 番目の問題は、セルがフォーカスを失うと、DataGridComboBoxColumn から選択された値が失われることです。
誰でも私を助けることができますか?
どんな助けにも本当に感謝します:D
Thx b4