【问题标题】:Load DataGrid rows with foreign keys using ComboBox使用 ComboBox 加载具有外键的 DataGrid 行
【发布时间】:2016-09-09 14:08:35
【问题描述】:

我正在尝试将一系列行加载到包含其他表的外键的 DataGrid 中。在这种特定情况下,行有一个 TransactionTypeID(TransactionTypes 表的外键),我希望我的 ComboBox(ItemsSource 是 Transactions 表中的 DataView 类型)正确显示并允许修改。

<DataGridTemplateColumn Header="Transaction Types">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="Need ComboBox SelectedText here!"></TextBlock>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding DataContext.TransactionTypes, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                DisplayMemberPath="Description"
                SelectedValuePath="ID"
                SelectedItem="{Binding TransactionTypeID}"></ComboBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

ComboBox SelectedItem 似乎不起作用,我不知道如何填充 TextBlock 文本。

【问题讨论】:

  • 你能描述一下 ComboBox SelectedItem 似乎不起作用的原因吗?
  • @EdPlunkett 组合框没有选择。
  • 您从列表中选择了一个项目并且组合框保持空白?
  • @EdPlunkett 不,该行的默认选择不会被填充。

标签: c# wpf data-binding datagrid


【解决方案1】:

我的理解是,您要设置列的值并根据下拉列表中的特定选择显示交易类型描述。此示例显示在从编辑模板的下拉列表中选择值后绑定文本块中的文本。

XAML:

<Grid DataContext="{x:Static local:dc.Instance}">
    <Grid.Resources>
        <DataTemplate x:Key="DisplayTemplate" >
            <TextBlock Text="{Binding TransactionType.Description}"></TextBlock>
        </DataTemplate>
        <DataTemplate x:Key="EditTemplate">
            <ComboBox ItemsSource="{x:Static local:dc.TransactionTypes}"
                DisplayMemberPath="Description"
                SelectedItem="{Binding TransactionType}">
            </ComboBox>
        </DataTemplate>
    </Grid.Resources>
    <DataGrid Name="DG1" ItemsSource="{Binding Path=DGItems}" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Transaction Type" 
                                    CellTemplate="{StaticResource DisplayTemplate}" 
                                    CellEditingTemplate="{StaticResource EditTemplate}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

数据上下文类:

public class dc
{
    private static readonly dc _dc = new dc();
    public static dc Instance { get { return _dc;  } }


    public class TransactionTypeItem
    {
        public int ID { get; set; }
        public string Description { get; set; }
    }

    public static List<TransactionTypeItem> TransactionTypes
    {
        get
        {
            return new List<TransactionTypeItem>() { new TransactionTypeItem() { ID = 0, Description = "Zero" },
                                                    new TransactionTypeItem() { ID = 1, Description = "One" },
                                                    new TransactionTypeItem() { ID = 2, Description = "Two" } };
        }
    }

    public class DataItem
    {
        public TransactionTypeItem TransactionType { get; set; }
        public string OtherData { get; set; }
    }


    private List<DataItem> _items;

    public List<DataItem> DGItems
    {
        get
        {
            return _items;
        }
    }




    private dc()
    {
        _items = new List<DataItem>()
        {
            new DataItem() { OtherData = "Test0", TransactionType = TransactionTypes[0] },
            new DataItem() { OtherData = "Test1", TransactionType = TransactionTypes[1] },
            new DataItem() { OtherData = "Test2", TransactionType = TransactionTypes[2] },
        };
    }

}

【讨论】:

  • 这里唯一的问题是我想使用 DataView 作为我的 DataGrid 的 ItemsSource。
  • 这应该很容易,将 ItemSource Path 更改为指向您的真实 DataView。
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 2021-05-01
相关资源
最近更新 更多