一、实验目的

  1. 掌握ADO .NET数据离线与在线访问模型;
  2. 掌握应用LINQ进行数据查询;
  3. 继续应用WPF技术进行界面编程。

二、实验内容

使用提供的Northwind.mdb数据库,利用DataGrid控件进行数据库查询与更新:

1、新建WPF工程与窗口。

2、添加“选择查询条件”标签,再加一个ComboBox,设置其元素包含“客户”表的主要字段名(公司名称、联系人姓名、城市)。

3、添加“设置查询值”标签,再加一个Combobox,供输入查询用的值;添加“开始查询”按钮;添加一个DataGrid控件。

4、定义GetAllGuests()方法,获取数据,放入DataGrid控件的ItemsSource字段。在窗体装载(Load)时调用它,作为DataGrid控件的数据源,展示“客户”表中所有信息。

5、定义GetAllColumns方法,获取某列中数据。在用户选择查询条件后,调用该方法,将所得数据作为“查询值Combobox”的数据源。获取列名的方法:

            OleDbDataReader reader = command.ExecuteReader();reader.Read();List<string> columns = new List<string>();for(int i=0; i<reader.FieldCount; i++){columns.Add(reader.GetName(i));}comboColumn.ItemsSource = columns;

6、定义DataView GetSelectedGuest()方法。点击查询按钮后,将查询所得数据展现出来。

7、在下方添加一个标签控件,在点击DataGrid控件中某行时,响应CellClick事件。查询“订单”表,在标签控件中显示“xx客户共有xx个订单”信息。

获取客户ID:

            DataRowView data = gridData.SelectedItem as DataRowView;if (data == null)return;string id = data["客户ID"].ToString();

8*、可以根据自己的想法,添加更加丰富的功能。比如引入图表控件(livecharts等),将查询到的数据展示在图表中。

源代码

XAML

<Window x:Class="Homework13.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:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"xmlns:local="clr-namespace:Homework13"mc:Ignorable="d"Title="简易数据库查询工具" Height="450" Width="1294.239" Loaded="Window_Loaded"><Grid><Grid Margin="0,0,0,0"><Button Content="全部" HorizontalAlignment="Left" Margin="10,15,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/><Label Content="选择查询条件:" HorizontalAlignment="Left" Margin="100,15,0,0" VerticalAlignment="Top"/><ComboBox x:Name="comboColumn" HorizontalAlignment="Left" Margin="200,15,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="comboColumn_SelectionChanged"/><Label Content="设置查询值:" HorizontalAlignment="Left" Margin="350,15,0,0" VerticalAlignment="Top"/><ComboBox x:Name="comboRow"  HorizontalAlignment="Left" Margin="450,15,0,0" VerticalAlignment="Top" Width="120"/><Button Content="查询" HorizontalAlignment="Left" Margin="600,15,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/><DataGrid x:Name="datagrid" HorizontalAlignment="Left" Height="325" Margin="0,50,0,0" VerticalAlignment="Top" Width="800" MouseUp="datagrid_MouseUp"/><Label x:Name="status" Content="" HorizontalAlignment="Left" Margin="0,375,0,0" VerticalAlignment="Top" Height="25" Width="800"/></Grid><lvc:PieChart x:Name="chart" LegendLocation="Bottom" DataClick="Chart_OnDataClick" Hoverable="False" DataTooltip="{x:Null}" Height="325" Margin="800,0,0,0" ><lvc:PieChart.Series><!--DataLabels属性是显示模块标签的、PointLabel是占比--><lvc:PieSeries Title="Maria" Values="3" DataLabels="True"LabelPoint="{Binding PointLabel}"/><lvc:PieSeries Title="Charles" Values="4" DataLabels="True" LabelPoint="{Binding PointLabel}"/><lvc:PieSeries Title="Frida" Values="6" DataLabels="True" LabelPoint="{Binding PointLabel}"/><lvc:PieSeries Title="Frederic" Values="2" DataLabels="True" LabelPoint="{Binding PointLabel}"/></lvc:PieChart.Series></lvc:PieChart></Grid>
</Window>

CS

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 LiveCharts;
using LiveCharts.Wpf;
namespace Homework13
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{static string _mdbFile = "E:\\School Life\\University\\Study\\计算机\\程序语言\\C#\\第十三次课0529\\Northwind\\Northwind.mdb";static OleDbConnection _connection;static OleDbDataAdapter _adapter;static DataSet _dataset;// 使用泛型动态传入数据public Func<ChartPoint, string> PointLabel { get; set; }public MainWindow(){InitializeComponent();// 自定义显示标签PointLabel = chartPoint =>string.Format("{0} ({1:P})", chartPoint.Y, chartPoint.Participation);DataContext = this;}public void GetAllGuests() {DataView dataView  = GetSelectedGuest();datagrid.ItemsSource = dataView;SeriesCollection series = new SeriesCollection();Dictionary<String, int> d = new Dictionary<string, int>();foreach (DataRow row in dataView.Table.Rows) {if (!d.ContainsKey(row.Field<string>("地区"))){//已存在keyd.Add(row.Field<string>("地区"),0);}d[row.Field<string>("地区")]++;}foreach (var pair in d) {series.Add(new PieSeries{Title = pair.Key,Values = new ChartValues<int> { pair.Value },DataLabels = true,LabelPoint = PointLabel}) ;  }chart.Series = series;}public void GetAllColumns(){var command = _connection.CreateCommand();command.CommandText = "select * from 客户";OleDbDataReader reader = command.ExecuteReader();reader.Read();List<string> columns = new List<string>();for (int i = 0; i < reader.FieldCount; i++){columns.Add(reader.GetName(i));}comboColumn.ItemsSource = columns;reader.Close();}public DataView GetSelectedGuest() {var command = _connection.CreateCommand();command.CommandText = "select * from 客户";Console.WriteLine(status.Content);if (comboColumn.SelectedIndex != -1 && comboRow.SelectedIndex != -1){command.CommandText = "select * from 客户 where " + comboColumn.Text + "='" + comboRow.Text + "'";}status.Content = command.CommandText;_dataset = new DataSet();DataTable dt1 = new DataTable("Scene");_dataset.Tables.Add(dt1);_adapter = new OleDbDataAdapter(command);_adapter.Fill(dt1);return dt1.DefaultView;}private void Window_Loaded(object sender, RoutedEventArgs e){string connString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _mdbFile;_connection = new OleDbConnection(connString);//补全try{_connection.Open();Console.WriteLine("数据库连接成功:" + _mdbFile + " is " + _connection.State);GetAllGuests();GetAllColumns();}catch (Exception ex){Console.WriteLine(ex.Message);_connection.Close();}finally{}}private void comboColumn_SelectionChanged(object sender, SelectionChangedEventArgs e){if (comboColumn.SelectedIndex == -1) {comboRow.ItemsSource = null;return;}var command = _connection.CreateCommand();command.CommandText = "select * from 客户";OleDbDataReader reader = command.ExecuteReader();SortedSet<string> columns = new SortedSet<string>();while(reader.Read()){columns.Add(reader[comboColumn.SelectedIndex].ToString());}comboRow.ItemsSource = columns;reader.Close();}private void Button_Click(object sender, RoutedEventArgs e){GetAllGuests();}private void datagrid_MouseUp(object sender, MouseButtonEventArgs e){DataRowView data = datagrid.SelectedItem as DataRowView;if (data == null)return;string id = data["客户ID"].ToString();var command = _connection.CreateCommand();command.CommandText = "select count(*) from 订单 where 客户ID='"+ id +"'";int count = (int)command.ExecuteScalar();status.Content = data["客户ID"]+"客户共有" + count + "个订单";Console.WriteLine("记录总数:" + count);}private void Button_Click_1(object sender, RoutedEventArgs e){comboColumn.SelectedIndex = -1;GetAllGuests();}/***  饼图鼠标点击事件*/private void Chart_OnDataClick(object sender, ChartPoint chartpoint){var chart = (LiveCharts.Wpf.PieChart)chartpoint.ChartView;//clear selected slice.foreach (PieSeries series in chart.Series)series.PushOut = 0;var selectedSeries = (PieSeries)chartpoint.SeriesView;selectedSeries.PushOut = 8;}}}

运行结果

三、实验心得与体会

  1. 掌握ADO .NET数据离线与在线访问模型;
  2. 掌握应用LINQ进行数据查询;
  3. 继续应用WPF技术进行界面编程。

参考文章

https://blog.csdn.net/zdyueguanyun/article/details/51392477

https://blog.csdn.net/sinat_33607851/article/details/50451255

https://www.cnblogs.com/wleaves/p/4689250.html

https://blog.csdn.net/CalledJoker/article/details/89356164

C#——《C#语言程序设计》实验报告——数据库编程——基于ADO.NET技术和WPF技术的简单数据库可视化工具DEMO相关推荐

  1. c语言程序设计实验8,c语言程序设计实验报告8_c语言实验报告格式及实验内容_c语言设计报告...

    实验名称 计算出1000以内10个最大素数之和 实验目的 1.熟练掌握if.if-else.if-else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和s ...

  2. c语言程序设计循环结构实验报告,C语言程序设计实验报告选择与循环结构程序设计.doc...

    C语言程序设计实验报告选择与循环结构程序设计 学 生 实 验 报 告 学 院: 软件与通信工程学院 课程名称: C++与程序设计 专业班级: 通信121 姓 名: 学 号: 学生实验报告(2) 学生姓 ...

  3. c语言坐标正算实验报告,C语言程序设计实验报告范文

    实验名称 计算出1000以内10个素数之和 实验目的 1.熟练掌握if.if-else.if-else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和swi ...

  4. c语言程序设计实验报告2,C语言程序设计实验报告2.docx

    C语言程序设计实验报告2.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该 ...

  5. c 语言差错编码实验结果,C语言程序设计实验报告(四).doc11111111111111111.doc

    C语言程序设计实验报告(四).doc11111111111111111 C语言程序设计实验报告 姓 名吴文重学 号52系 别数学系班级2班主讲教师徐时芳指导教师徐时芳实验日期2011-11-8专业10 ...

  6. c语言选择循环实验报告,C语言程序设计实验报告选择与循环结构程序设计.doc

    C语言程序设计实验报告选择与循环结构程序设计.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的 ...

  7. c语言的简单程序设计实验报告,工程学院C语言程序设计实验报告

    <工程学院C语言程序设计实验报告>由会员分享,可在线阅读,更多相关<工程学院C语言程序设计实验报告(5页珍藏版)>请在人人文库网上搜索. 1.南京工程学院实验报告课程名称C 语 ...

  8. c语言程序设计植树,C语言程序设计实验报告——实验

    C语言程序设计实验报告--实验 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  9. c语言程序设计数组实验报告,(C语言程序设计实验报告数组.doc

    (C语言程序设计实验报告数组 <C语言程序设计 >课程实验报告 实验名称 学 号_ 姓 名 ___ 班 别 实验日期: 年月日 实验报告日期: 年月日 指导老师: 实验地点: 成 绩: 评 ...

  10. c语言程序设计数组实验报告,c语言程序设计实验报告(数组).doc

    c语言程序设计实验报告(数组).doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

最新文章

  1. 数据安全(主从复制)
  2. 区块链BaaS云服务(21)腾讯CCGP“跨链流程”
  3. MyBatis中提示:元素类型为 mapper 的内容必须匹配 (cache-ref|cache|resultMap*|parameterMap*|sql*|insert*|update*|de
  4. CentOS中输入yum报错:sudo: unable to execute /bin/yum: No such file or directory
  5. 架构漫谈(八):从架构的角度看如何写好代码
  6. 机器人从计算机应用领域看,人的素质差异,本质地不在于他们即存知识信息量的差异,而在于他们思维能力的差异。( )...
  7. 支持linux系统摄像头模块,在Linux操作系统上使用摄像头
  8. bzoj1085骑士精神(搜索)
  9. mysql for update_mysql SELECT FOR UPDATE语句使用示例
  10. 【C语言】C语言结构解析
  11. Objective C运行时(runtime)技术总结,好强大的runtime
  12. 5G格局剧变!苹果高通和解,英特尔退票出局,华为独善其身
  13. 这种div高度自适应确定你知道吗?
  14. 问题:html控件中sleect的Option()的用法
  15. dm9000网卡驱动分析
  16. 启动react-native报错 Unrecognized font family 'Ionicons'
  17. 【斯坦福大学公开课CS224W——图机器学习】六、图神经网络1:GNN模型
  18. 青春有多9,我爱我所有
  19. 打开和设置IDEA欢迎界面
  20. sRGB HDR概念性学习

热门文章

  1. URL重写后,在有页面回发时的处理
  2. python解初中题_用python解一道数独小题
  3. c语言 双线程,如何用C语言实现多线程
  4. linux 一块网卡两个ip,Linux 一块网卡配置多个IP的方法
  5. roobo机器人怎么唱歌_日本“观音”机器人问世,可以陪僧人念佛经
  6. linux中怎么安装ded包_快速提示:如何在Linux中安装.deb和.tar文件 - push博客
  7. printwriter 要close吗_中国股市:市盈率低估,就意味着可以买入吗?不懂你就输了...
  8. 四个变量的图表怎么做_年终总结必备:Excel双色图表怎么做?数据表达更直观...
  9. java getheight_Java ETC1.getHeight方法代码示例
  10. 一、为了OFFER系列 | 阿里云天池赛在线编程:移动的圆