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表里的字段
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表里的字段
相关文章推荐
- 如何用最简单的方法让WPF程序支持多国语言,并且语言文字用户可以随意编辑?
- 如何在datagrid的模版编辑列里动态绑定了一个dropdownlist
- 数组如何绑定到DataGrid或DataList
- WPF ComboBox如何绑定多项值
- WPF之MVVM中DataGrid中嵌入Combox,改变Combox可回传至绑定的实体
- WPF 控件如何绑定资源中的数据
- WPF DataGrid 数据绑定
- WPF DataGrid 绑定数据库数据表
- 如何应用程序中载入其他域的swf文件,并且允许它访问程序中的 ActionScript
- wpf中datagrid绑定数据源发生改变
- wpf 如何更改绑定到控件模版
- WPF listview 如何绑定 Oracle 数据库 以及不错的oralceHelper.cs 文件
- EasyUI DataGrid 双击编辑单元格,保存并且后台数据改变
- WPF 中combox与datagrid绑定
- WPF DataGrid 绑定DataSet数据 自动生成行号
- WPF 中如何使得DataGrid的Column有鼠标点击相应
- DataGrid编辑时让DropDownList绑定数据库中某项表并设置默认选中
- DataGrid中的子控件Combox之数据源绑定(WPF)
- WPF DataGrid中列的属性绑定问题
- 数组如何绑定到DataGrid或DataList