4

こんにちはみんな..

私の考えは、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

4

1 に答える 1

1

両方の問題を解決するには、次のことを行います。

SelectedValuePath="{Binding fieldtype_id}"

次のようにする必要があります。

SelectedValuePath="fieldtype_id"

于 2016-08-25T14:40:44.597 に答える