加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将字典绑定到DataGridComboBoxColumn WPF

发布时间:2020-12-15 21:48:03 所属栏目:百科 来源:网络整理
导读:Helo家伙.. 我的想法是使用DataGrid作为映射器模板,首先网格将加载数据,让我们说“表A”,其中一个列将显示数据,让我们说“表B” 我有一个像这样的“表B”: fieldtype_id | fieldtype_name 1 int 2 varchar 3 date 我想使用DataGridComboBoxColumn在wpf Data
Helo家伙..

我的想法是使用DataGrid作为映射器模板,首先网格将加载数据,让我们说“表A”,其中一个列将显示数据,让我们说“表B”

我有一个像这样的“表B”:

fieldtype_id | fieldtype_name
     1             int
     2             varchar
     3             date

我想使用DataGridComboBoxColumn在wpf Datagrid中显示此表.

所以,我在其中创建了一个wpf窗口和datagrid,下面是XAML

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="12,123,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).

那么第二个问题是,当单元格失去焦点时,从DataGridComboBoxColumn中选择的值将丢失.

谁能帮我?

非常感谢任何帮助:D

Thx b4

解决方法

要解决您的两个问题,您的:

SelectedValuePath=”{Binding fieldtype_id}”

应该:

SelectedValuePath=”fieldtype_id”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读