博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C#的数据绑定,存取数据库实例详解 (二)
阅读量:5836 次
发布时间:2019-06-18

本文共 6349 字,大约阅读时间需要 21 分钟。

我首先实现了显示的功能(不用去读数据库,将数据直接填到集合里面,通过数据绑定,在界面能都显示出来),所以我应该是从Model和View层开始的。

首先是MainWindow.xaml 界面,代码和界面如下。

有5处关于数据绑定的:

  1)ListBox 绑定 InlineTools(这是tool的集合,从数据库中获取所有的tools)但显示的只是Name。

  2)SelectedItem绑定的是CurrentInlineTool,当选中其中一条tool时,CurrentInlineTool就是你当前选中的tool。

  3) TextBox绑定的是CreateNewTool.Name,当创建一个新的tool时,其Name可以通过用户输入的方式命名。

      4)两个Buttton分别绑定CreateCommand和DeleteCommand。新建一个tool以及删除一个tool.

1     
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

InlineToolModel.cs代码如下,开始写的时候只写了前两个字段用来创建数据库,后面的方法是用到的时候添加上去的。

1 using CIS.DAL; 2 using Microsoft.Practices.Prism.Mvvm; 3 using SQL.DAL.Model; 4 using SQL.DAL.Repository; 5 using SQLtest.Model; 6 using System; 7 using System.Collections.Generic; 8 using System.Linq; 9 using System.Text;10 using System.Threading.Tasks;11 12 namespace SQLtest.Model13 {14    public  class InlineToolModel:BindableBase, IEntity15     {16         public int Id17         {18             get;19             set;20         }21         private string name;22         public string Name23         {24             get { return name; }25             set26             {27                 if (name != value)28                 {29                     name = value;30                     this.OnPropertyChanged("name");31                 }32             }33         }34 35         public void SaveTool()36         {37             if (string.IsNullOrEmpty(this.Name))38             {39                 throw new Exception("用户名不能为空!");40             }41             if (this.IsExistSameName())42             {43                 throw new Exception("已存在同名用户!");44             }45             InlineToolModel tool= new InlineToolModel();46             tool.Name  = this.Name;47             CISDbContext db = new CISDbContext();48             db.t_InlineToolModel.Add(tool);49             db.SaveChanges();50         }51         public void DeleteTool()52         {53             InlineToolModel tool = new InlineToolModel();54             tool.Name = this.Name;55             CISDbContext db = new CISDbContext();56             var dblog = db.t_InlineToolModel.FirstOrDefault(d => d.Name == tool.Name);57 58             if (dblog != null)59             {60                 db.t_InlineToolModel.Remove(dblog);61                 db.SaveChanges();62             }63         }64         public bool IsExistSameName()65         {66             CISDbContext db = new CISDbContext();67             Repository
oRep = new Repository
(db);68 var exists = oRep.GetAll().Where(d => d.Name == this.Name && d.Id != this.Id);69 return exists.Count() > 0;70 }71 public InlineToolModel()72 { 73 }74 }75 }

MainWindowViewModel.cs代码如下,在此一定要注意实例化,不然总是会出错。里面定义了InlineTools,CurrentInlineTool ,CreateNewTool,CreateCommand和DeleteCommand,与数据绑定有关。

1 using CIS.DAL; 2 using Microsoft.Practices.Prism.Commands; 3 using Microsoft.Practices.Prism.Mvvm; 4 using SQL.DAL.Repository; 5 using SQLtest.Model; 6 using System; 7 using System.Collections.Generic; 8 using System.Collections.ObjectModel; 9 using System.Data.Entity;10 using System.Data.Entity.Validation;11 using System.Linq;12 using System.Text;13 14 using System.Threading.Tasks;15 using System.Windows;16 17 namespace SQLtest.Model18 {19     public class MainWindowViewModel : BindableBase20     {21         private ObservableCollection
inlineTools;22 public ObservableCollection
InlineTools23 {24 get { return inlineTools; }25 set26 {27 inlineTools = value;28 this.OnPropertyChanged(() => InlineTools);29 }30 }31 private InlineToolModel currentTool;32 public InlineToolModel CurrentInlineTool33 {34 get { return currentTool; }35 set36 {37 currentTool = value;38 this.OnPropertyChanged(() => CurrentInlineTool);39 }40 }41 private InlineToolModel createNewTool;42 public InlineToolModel CreateNewTool43 {44 get { return createNewTool; }45 set46 {47 createNewTool = value;48 this.OnPropertyChanged(() => CreateNewTool);49 }50 }51 52 public static DelegateCommand
CreateCommand { get; set; }53 public static DelegateCommand DeleteCommand { get; set; }54 public MainWindowViewModel()55 {56 this.DataRefresh();57 CreateCommand = new DelegateCommand(OnCreate);58 DeleteCommand = new DelegateCommand(OnDelete);59 CreateNewTool= new Model.InlineToolModel();60 61 }62 63 public void OnCreate(object e)64 {65 try66 {67 CreateNewTool.SaveTool();//检查有无重名和空,CreateNewTool.SaveTest(CreateNewTool.Name)68 this.DataRefresh();69 }70 catch (System.Exception ex)71 {72 MessageBox.Show(string.Format("{0}", ex.Message));73 }74 }75 public void OnDelete(object e)76 {77 if (CurrentInlineTool == null) return;78 if (MessageBox.Show(string.Format("Delete Tool:{0}?", CurrentInlineTool.Name), "Delete", MessageBoxButton.OKCancel) == MessageBoxResult.OK)79 {80 CurrentInlineTool.DeleteTool();81 }82 DataRefresh();83 }84 public void DataRefresh()85 {86 InlineTools = new ObservableCollection
();87 CISDbContext db = new CISDbContext();88 Repository
oRep = new Repository
(db);89 foreach (var item in oRep.GetAll())90 {91 InlineTools.Add(item);92 }93 }94 } 95 }

 

转载于:https://www.cnblogs.com/hellcats/p/6000993.html

你可能感兴趣的文章
【数据库】
查看>>
WindowManager.LayoutParams 详解
查看>>
Android的Aidl安装方法
查看>>
Linux中rc的含义
查看>>
实现跨交换机VLAN间的通信
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
C++ 0X 新特性实例(比较常用的) (转)
查看>>
node生成自定义命令(yargs/commander)
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>
win7 64位+Oracle 11g 64位下使用 PL/SQL Developer 的解决办法
查看>>
BZOJ1997:[HNOI2010]PLANAR——题解
查看>>
HTML5新手入门指南
查看>>
opennebula 开发记录
查看>>
sql 内联,左联,右联,全联
查看>>
C++关于字符串的处理
查看>>
6、Web Service-拦截器
查看>>
Flask 源码流程,上下文管理
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>