您的位置:首页 > 其它

WPF如何将datagrid绑定到多张表并且允许编辑

2009-11-25 13:36 344 查看
好久前在边学WPF边做开发的时候 就遇到了“怎么将datagrid 的数据源设置为多个表的集合”的问题,办法是有,像使用CollectionContainer等, 但是这些方法都会有一个相同的问题就是无法在datagrid里进行编辑。。 今天终于找到一个比较不错的方法了。。。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using ShoppingCard.Core;
using System.Collections;

namespace ShoppingCard.Views {
/// <summary>
/// Card_Management.xaml 的交互逻辑
/// </summary>
public partial class CardManagement : UserControl {
DataTable dt;
public CardManagement() {
InitializeComponent();
}

// 这个类比较的重要。。。

public class CardJoin {
public DataRow ShoppingCardRow { get; set; }
public DataRow ShoppingCardInventoryRow { get; set; }

public CardJoin(DataRow _ShoppingCardRow, DataRow _ShoppingCardInventoryRow) {
ShoppingCardRow = _ShoppingCardRow;
ShoppingCardInventoryRow = _ShoppingCardInventoryRow;
}
}

public void init() {
dt = DBOperation.GetDBDataSet("ShoppingCard").Tables[0];

//下面的查询就是把两个datatable的数据查询出来。。。
var Join = from a in dt.AsEnumerable()
join b in DBOperation.GetDBDataSet("ShoppingCardInventory").Tables[0].AsEnumerable()
on a.Field<string>("CardName") equals b.Field<string>("CardName")
select new CardJoin(a, b);

List<CardJoin> list = new List<CardJoin>();
foreach (var data in Join)
list.Add(data);
dgCardManagement.ItemsSource = list;
}
}
}

前台代码(datagrid的绑定):

注意:Binding="{Binding Path=ShoppingCardInventoryRow[CardName] 注意文中红色字体。。。

<my:DataGrid x:Name="dgCardManagement" AutoGenerateColumns="False">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="CardName" Binding="{Binding Path=ShoppingCardInventoryRow[CardName]}"/>
<my:DataGridTextColumn Header="Denomination" Binding="{Binding Path=ShoppingCardInventoryRow[Denomination]}"/>
<my:DataGridTextColumn Header="Description" Binding="{Binding Path=ShoppingCardRow[CardDescription]}"/>
<my:DataGridTextColumn Header="Image" Binding="{Binding Path=ShoppingCardRow[Image]}"/>
</my:DataGrid.Columns>
</my:DataGrid>

CardName、CardDescription、Image是ShoppingCard表里的字段

CardName、Denomination是ShoppingCardInventor表里的字段

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: