wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017 .
子表绑定DataTable数据源.这样的好处是从数据库查询完成不用转换就可以绑定数据,非常方便.
DetailsDataGrid.ItemsSource = DS.Tables[“DetailsDataTable”].DefaultView;
这条语句绑定了字表的数据源.
虽然实现了功能,但还有错误,实现显示收缩子表时有闪烁,这与dataset数据库查询慢有关,选择行的单元格时常不能编辑,这和子表的显示折叠不知如何控制有关,希望抛砖引玉,与大家共同进步.
效果图如下:

xml代码:

<Window x:Class="YZTelApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:YZTelApp"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><Grid><!--主从表--><DataGrid Name="YuYueDataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" ColumnWidth="*"><DataGrid.Columns><DataGridTextColumn Header="房号" Binding="{Binding 房号}" CanUserResize="False" Width="Auto"/><DataGridTextColumn Header="电话号码" Binding="{Binding 电话号码}" CanUserResize="False" Width="Auto"/><DataGridTextColumn Header="进线序号" Binding="{Binding 进线序号}" CanUserResize="False" Width="Auto"/><DataGridTextColumn Header="出线位置" Binding="{Binding 出线位置}" CanUserResize="False" Width="Auto"/><DataGridTextColumn Header="运营商" Binding="{Binding 运营商}" CanUserResize="False" Width="Auto"/><DataGridTextColumn Header="安装日期" Binding="{Binding 安装日期}" CanUserResize="False" Width="Auto"/><DataGridTextColumn Header="备注" Binding="{Binding 备注}"  /></DataGrid.Columns><DataGrid.RowDetailsTemplate><DataTemplate><!--从表--><DataGrid Name="DetailsDataGrid" IsReadOnly="True" AutoGenerateColumns="False" Margin="15,8,8,8"  Background="Green" Width="399"><DataGrid.Columns><DataGridTextColumn Header="房号" Binding="{Binding 房号}" Width="Auto"/><DataGridTextColumn Header="电话号码" Binding="{Binding 电话号码}" Width="Auto"/><DataGridTextColumn Header="进线序号" Binding="{Binding 进线序号}" Width="Auto"/><DataGridTextColumn Header="出线位置" Binding="{Binding 出线位置}" Width="Auto"/><DataGridTextColumn Header="运营商" Binding="{Binding 运营商}" Width="Auto"/><DataGridTextColumn Header="安装日期" Binding="{Binding 安装日期}" Width="Auto"/></DataGrid.Columns></DataGrid></DataTemplate></DataGrid.RowDetailsTemplate></DataGrid></Grid>
</Window>

c#d代码:

using System;
using System.Data;
using System.Data.OleDb;
using System.Windows;
using System.Windows.Controls;namespace YZTelApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();YuYueDataGrid.DataContext = GetDataSet("select * from 预约电话", "YuYueDataTable").Tables["YuYueDataTable"];YuYueDataGrid.RowDetailsVisibilityChanged += new EventHandler<DataGridRowDetailsEventArgs>(YuYueDataGrid_RowDetailsVisibilityChanged);}private string conStr = Properties.Settings.Default.YZTelDBConnectionString;public DataSet GetDataSet(string SqlStr,string TblName){OleDbConnection OleCon = new OleDbConnection(conStr);DataSet DS;DS = new DataSet();OleDbCommand cmd = new OleDbCommand(SqlStr, OleCon);//预约电话表try{OleCon.Open();OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);adapter.Fill(DS, TblName);}catch (Exception e){MessageBox.Show(e.Message);}finally{OleCon.Close();}return DS;}//string CellValue;void YuYueDataGrid_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e){DataGrid MainDataGrid = sender as DataGrid;var cell = MainDataGrid.CurrentCell;int HeaderIndex = cell.Column.DisplayIndex;//获取单元格表头索引if(HeaderIndex>3)//3列以后不进行详细查询{MainDataGrid.SelectedIndex = 1;return;}DataRowView item = cell.Item as DataRowView;string CellValue="";if (item == null){return;} else{CellValue = item[cell.Column.DisplayIndex].ToString();//获取选中的当前单元格的值if (string.IsNullOrEmpty(CellValue)){MainDataGrid.SelectedIndex = -1;return;}}string HeaderName = MainDataGrid.CurrentColumn.Header.ToString();//获取单元格表头名字(列名)string SqlStr = String.Format("SELECT * FROM(SELECT * FROM 联通进线 WHERE {0}='{1}' " +"UNION SELECT * FROM 电信进线 WHERE {2}='{3}' " +"UNION SELECT * FROM 铁通进线 WHERE {4}='{5}')", HeaderName, CellValue, HeaderName, CellValue, HeaderName, CellValue);//MessageBox.Show(HeaderIndex+" "+ HeaderName + " "+ CellValue);DataGrid DetailsDataGrid = e.DetailsElement as DataGrid;DataSet DS = GetDataSet(SqlStr, "DetailsDataTable");if (!IfExitData(DS,0)){MainDataGrid.SelectedIndex = -1;return;}DetailsDataGrid.ItemsSource = DS.Tables["DetailsDataTable"].DefaultView;}/// <summary>/// 检查一个DataSet 里面是否含有数据/// </summary>/// <param name="ds">要检测的DataSet</param>/// <param name="tableIndex">DataSet里Table的索引</param>/// <returns>True: 里面有数据。 False:里面没有数据</returns>public static bool IfExitData(DataSet ds, int tableIndex){if (ds != null && ds.Tables[tableIndex].Rows.Count > 0){return true;}else{return false;}}}
}

wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017相关推荐

  1. 主从表 ajax,DWZ主从表结构 · Issue #72 · OtakuFly/dwz · GitHub

    使用DWZ主从表结构,从表读取数据集显示,用于表单修�� �功能 ID所属专业工作量项目单位数量操作 查找带回 查找带回 删除 通过增加明细按钮,可以增加表格行,表格行最后的删除按�� �,可以删除新 ...

  2. java 主从表_如何开发主从报表

    主从报表是一种很常见的报表需求:报表数据分为上下两部分,上方为汇总说明信息,下方为明细列表信息.如何快速制作这类报表呢?下面我们通过一个例子来看一下润乾报表是如何做的: 需求说明: 销售系统中的客户订 ...

  3. mysql主从表结构差异_mysqldiff对比主从表结构是否一致

    mysqldiff该工具是官方mysql-utilities工具集的一个脚本,可以实现主从服务器表结构是否一致.数据校验需要使用Percona的pt-table-checksum工具. 安装:# ta ...

  4. 数据结构--顺序表、链表、栈、队列、树、文件(visual studio可运行)

    顺序表的顺序存储(增删查) #include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int Elem ...

  5. WPF DataGrid 主从表 数据绑定方式

    昨天在网上搜了一下午没有看到一个关于WPF DataGrid主从表数据绑定的示例,但是我坚信这个简单的功能肯定是支持的,经研究问题解决. 现把相关方法共享下,给现在还在郁闷的兄弟们一点参考.重点在于定 ...

  6. 【EasyUI DataGrid DetailView】表格嵌套子表格

    一.功能描述 在做项目的时候,要求能够对某一行的数据进行折叠显示,用来查看该行的详细信息.拟通过采用easyui的detailview创建表格分组,大致的效果图如下所示: 二.使用方法 本篇博客承接以 ...

  7. WPF DataGrid 绑定 DataTable

    DataGrid 绑定 DataTable: 界面: <Window x:Class="DataGridBindDataTable.MainWindow"xmlns=&quo ...

  8. DaleCloud(原NFine)介绍:使用easyui实现主从表提交(单据业务)

    目录 1.Form页面的Html代码 2.前端JS实现将DataGrid中的明细数据打包提交 3.后台接收提交数据的代码 4.Application业务中的保存方法 前言 很多使用DaleCloud( ...

  9. rowspan不显示 wpf_wpf的datagrid绑定datatable列不自动更新解决方案

    wpf的datagrid绑定datatable列不自动更新 描述如下: 想利用程序实现显示NORTHWND.MDF中的所有表.listbox显示数据库中的表清单,选中listbox里面的一项以后,在d ...

最新文章

  1. asp.net code-behind
  2. C语言的一些有趣的冷知识
  3. 51个国家,2372名选手,20万奖金池,阿里全球调度算法大赛收官
  4. 无锡技师学院计算机系,无锡技师学院
  5. [北航软工]第一次团队作业
  6. NOT运算符与运算符
  7. A Quantization-Friendly Separable Convolution for MobileNets
  8. 我的第一个*.SYS
  9. flume学习(七):如何使用event header中的key值
  10. python vimdiff_Vim实践与学习-09其他
  11. http://95u.free.fr/index.php,Electronic Software Distribution Service
  12. 项目管理知识体系指南 (五)
  13. python爬虫之——爬取煎蛋网图片
  14. 1号线彭埠站故障已经查明 是积水导致转辙机信号不良
  15. 计算机登录界面没有用户显示不出来,电脑开机时提示用户界面失败:无法加载登录用户界面的解决方法...
  16. 学术诚信的重要性_宋瑞:坚持学术诚信 恪守学术道德 捍卫学术尊严
  17. 修身养性,为人处事100条
  18. 同一个局域网怎么计算机共享打印机,如何在同一个局域网内将多台计算机连接到 USB 共享打印机,实现共同打印...
  19. 写出1~1000内5的倍数
  20. 【0】Docker---认识Docker

热门文章

  1. 天池竞赛员工离职预测训练赛
  2. SNA中:中心度及中心势诠释(不完整代码)
  3. 电信运营商瓶颈凸显,期寄区块链带来新增长
  4. 7-12 求6+66+666+6666+66666。分数 10
  5. 当前目录下有一个文件名为 score1.txt 的文本文件,存放着某班学生的计算机课成绩,共有学号、平时成绩、期末成绩三列。请根据平时成绩占 40%,期末成绩占 60%的比例计算总评成绩。
  6. P7选修 深度学习介绍
  7. 智云通CRM:客户说“我随便看看”,如何回应才能促进成交?
  8. 【吴恩达机器学习】Week4 编程作业ex3——多分类任务和神经网络
  9. 深度linux系统live版,【Deepin linux下载】Deepin Linux官方下载 v20 最新免费版(ios+Live)-开心电玩...
  10. 20170706总结