dataGrid+combobox数据绑定

快意一剑 2012-06-18 03:04:14
dataGrid中有1列字段A,该列的数据是集合B中字段C,集合B是从数据库中获取,不知道如何绑定ComboBox,使Combobox下拉列表是集合B中的所有的C字段,求帮助
...全文
242 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
namhyuk 2012-07-12
  • 打赏
  • 举报
回复
以Northwind数据库的Products表为例,把CategoryId对应的列显示成ComboBox(编辑模式),正常情况下该列用TextBlock显示CategoryName.


最终效果:



步骤:
1、edm图,以及增加DomainService.


2、NorthwindDomainService.cs

public IQueryable<Product> GetProducts()
{
//注意Include("Category")
return this.ObjectContext.Products.Include("Category");
}


3、NorthwindDomainService.metadata.cs

//注意[Include]
[Include]
public Category Category { get; set; }


4、MainWindowViewModel.cs

private NorthwindDomainContext _Context = new NorthwindDomainContext();
public EntitySet<Product> Products
{
get { return _Context.Products; }
}
public EntitySet<Category> Categories
{
get { return _Context.Categories; }
}
public MainPageViewModel()
{
//先Load Categories,再LoadCompleted回调里再Load Prodcuts.
if (!DesignerProperties.IsInDesignTool)
_Context.Load(_Context.GetCategoriesQuery(), lo=>_Context.Load(_Context.GetProductsQuery()), false);
}


5、MainPage.xaml
<UserControl.DataContext>
<vm:MainPageViewModel />
</UserControl.DataContext>
<UserControl.Resources>
<CollectionViewSource x:Key="categoriesResource" Source="{Binding Categories}" />
</UserControl.Resources>

……

<sdk:DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" ItemsSource="{Binding Products}" Margin="12,12,0,0" Name="productDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" Width="400">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Category" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Category.CategoryName,Mode=OneWay}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource categoriesResource}}" DisplayMemberPath="CategoryName" SelectedValuePath="CategoryID" SelectedValue="{Binding CategoryID, Mode=TwoWay}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn x:Name="productNameColumn" Binding="{Binding Path=ProductName}" Header="Product Name" Width="SizeToHeader" />
<sdk:DataGridTextColumn x:Name="quantityPerUnitColumn" Binding="{Binding Path=QuantityPerUnit}" Header="Quantity Per Unit" Width="SizeToHeader" />
<sdk:DataGridTextColumn x:Name="unitPriceColumn" Binding="{Binding Path=UnitPrice}" Header="Unit Price" Width="SizeToHeader" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
jv9 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你可以参考http://www.cnblogs.com/chengxingliang/archive/2011/03/03/1969824.html
文章内有关于DataGrid内绑定ComboBox的方法
[/Quote]

正解。

你也可以使用List<List<T>>的方式,嵌套数据集合对combox进行数据绑定,同样很方便实现。
Architecture Net 2012-06-18
  • 打赏
  • 举报
回复
你可以参考http://www.cnblogs.com/chengxingliang/archive/2011/03/03/1969824.html
文章内有关于DataGrid内绑定ComboBox的方法

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧