DataGrid中的子控件Combox之数据源绑定(WPF)
来源:互联网 发布:阿里云 云监控 编辑:程序博客网 时间:2024/03/29 17:33
看到同事有一个这样的需求,自己就写了一个小例子
如何根据DataGrid中Combox中选择的值将对应的数据显示到DataGrid中
创建了 三个数据源
List<int> SelectionList为 Combox 数据源存放于所有数据相相关联的字段值(Selection),
tb为 DataGrid数据源存放的是与Combox相关联的数据 (Age,Name,Selection),
oldtable 用于存放所有数据(Age,Name,Selection)
前台代码:
<Window x:Class="MyTestWPF.DataGridCombox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="DataGridCombox" Height="276" Width="633" Loaded="Window_Loaded"> <Grid> <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="False" Name="dg_Grid" AreRowDetailsFrozen="False" AllowDrop="True" Margin="23,0,23,32"> <DataGrid.Columns> <!--依赖属性绑定数据源下拉框必须同时指定EditingElementStyle、ElemengStyle才能显示下拉框中的数据--> <DataGridComboBoxColumn Header="ComboBox模式(修正)"> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding Path=SelectionList,RelativeSource={RelativeSource AncestorType={x:Type Window},Mode=FindAncestor}}" /> <Setter Property="SelectedValue" Value="{Binding Path=Value}" /> <Setter Property="Text" Value="{Binding Selection}"/> </Style> </DataGridComboBoxColumn.EditingElementStyle> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding Path=SelectionList,RelativeSource={RelativeSource AncestorType={x:Type Window},Mode=FindAncestor}}" /> <Setter Property="SelectedValue" Value="{Binding Path=Value}" /> </Style> </DataGridComboBoxColumn.ElementStyle> </DataGridComboBoxColumn> <!--不使用依赖属性绑定下拉框时,数据源中必须包含该属性字段--> <DataGridTemplateColumn Header="Template模式" x:Uid="Moshi"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox Tag="cbxList" x:Name="cbxList" DropDownClosed="cbxList_DropDownClosed" ItemsSource="{Binding Path=SelectionList,RelativeSource={RelativeSource AncestorType={x:Type Window},Mode=FindAncestor}}" Text="{Binding Selection}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="姓 名" Width="100"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBox Text="{Binding Name}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="年 龄"> <DataGridTemplateColumn.CellTemplate > <DataTemplate > <TextBox Text="{Binding Age}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> <ComboBox Height="23" HorizontalAlignment="Left" Margin="186,211,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" /> </Grid></Window>
后台代码: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.Shapes;using System.Data;using System.Collections;using System.Collections.ObjectModel;namespace MyTestWPF{ /// <summary> /// DataGridCombox.xaml 的交互逻辑 /// </summary> public partial class DataGridCombox : Window { DataTable tb; DataTable newtb; /// <summary> /// 下拉框数据源 /// </summary> public List<int> SelectionList { get { return _selectionList; } set { _selectionList = value; } } private List<int> _selectionList = new List<int>(); public DataGridCombox() { InitializeComponent(); tb = new DataTable(); DataColumn Name = new DataColumn("Name"); DataColumn Age = new DataColumn("Age"); DataColumn Selection = new DataColumn("Selection"); tb.Columns.Add(Name); tb.Columns.Add(Age); tb.Columns.Add(Selection); newtb = tb.Copy(); newtb.Clear(); banging(); check("1"); //if (SelectionList.Count > 0) //{ // DataGridTemplateColumn templeColumn = dg_Grid.Columns[1] as DataGridTemplateColumn; // if (templeColumn == null) return; // object item = dg_Grid.CurrentCell.Item; // FrameworkElement element = templeColumn.GetCellContent(dg_Grid.Items[0]); // ComboBox expander = templeColumn.CellTemplate.FindName("cbxList", element) as ComboBox; // expander.IsEnabled = false; //} } private void banging() { //如果绑定数据不采用依赖属性绑定 采用数据模板添加 Combox 则该下拉框的数据源为Selection for (int i = 0; i < 5; i++) { DataRow row = tb.NewRow(); row["Name"] = "AA" + i.ToString(); row["Age"] = i.ToString(); row["Selection"] = i.ToString(); SelectionList.Add(i); DataRow rw = newtb.NewRow(); rw["Name"] = "AA" + i.ToString(); rw["Age"] = i.ToString(); rw["Selection"] = i.ToString(); tb.Rows.Add(row); newtb.Rows.Add(rw); } //如果数据源绑定要用DataContent上下文数据绑定,则xmal界面必须指定ItemSource="{Binding}" } private void check(string str) { newtb.Clear(); DataRow[] row = tb.Select("Selection='" + str + "'"); if (row.Length > 0) { DataRow nrow = newtb.NewRow(); nrow["Name"] = row[0]["Name"].ToString(); nrow["Age"] = row[0]["Age"].ToString(); nrow["Selection"] = row[0]["Selection"].ToString(); newtb.Rows.Add(nrow); dg_Grid.DataContext = newtb; } } private void cbxList_DropDownClosed(object sender, EventArgs e) { ComboBox cbx = sender as ComboBox; if (cbx != null) { if (cbx.SelectedItem != null) { check(cbx.SelectedItem.ToString()); } } } private void Window_Loaded(object sender, RoutedEventArgs e) { if (SelectionList.Count > 1) { //dg_Grid.IsEnabled = false; // DataGridTemplateColumn templeColumn = dg_Grid.Columns[1] as DataGridTemplateColumn; // if (templeColumn == null) return; // object item = dg_Grid.CurrentCell.Item; // FrameworkElement element = templeColumn.GetCellContent(dg_Grid.Items[0]); // ComboBox expander = templeColumn.CellTemplate.FindName("cbxList", element) as ComboBox; // expander.IsEnabled = true; // expander.IsEditable = false; // expander.IsReadOnly = true; // comboBox1.IsEnabled = false; } } private void cbxList_Initialized(object sender, EventArgs e) { if (SelectionList.Count > 0) { ComboBox cbx = sender as ComboBox; cbx.IsEnabled = false; } } }}
当下来框的数据源是List时可以满足上述联动效果,可以当Combox改为newtb 时Combox中的数据就不显示了????
- DataGrid中的子控件Combox之数据源绑定(WPF)
- WPF-DataGrid 绑定数据源
- WPF--MVVM之DataGrid数据源绑定
- WPF之MVVM中DataGrid中嵌入Combox,改变Combox可回传至绑定的实体
- WPF 中combox与datagrid绑定
- WPF--MVVM之DataGrid ComboBox数据源绑定枚举
- wpf中datagrid绑定数据源发生改变
- WPF绑定各种数据源之元素控件属性
- WPF绑定数据源之RelativeSource
- Winform Combox 控件 绑定数据源时,触发SelectChange解决方案
- WPF绑定各种数据源之object数据源
- WPF绑定各种数据源之xml数据源
- windows8中的ComBox控件的数据绑定
- wpf绑定用户控件及listview(gridview)数据源
- datagrid 绑定 combox 取值
- wpf datagrid中的 DataGridComboBoxColumn数据绑定
- 绑定数据到wpf中的datagrid中
- WPF 控件中的数据绑定
- 南工acm 士兵杀敌(一) 两种方法
- 第2次上机课堂作业
- sql语句分组,显示同一分组中的其他元素
- /** * @see 将javascript数据类型转换为json字符串 * @param 待转换对象,支持object,array,string,function,number,boolean
- Java中调用存储过程
- DataGrid中的子控件Combox之数据源绑定(WPF)
- c++编程思想--const常量
- Hostapd
- parse_url()
- 关于myeclipse中的web项目重命名
- Java MultiThread学习笔记
- 第二次C语言作业
- 一个单用户博客系统DEMO——文章详情中插入评论表单
- js正则表达式的使用