使用WPF实现页面数据到数据库再绑定DataGird控件相关技术总结
前言:
最近公司让做一个关于WPF开发的一个标签程序,想同步做一个总结,来给自己巩固一下,同时也感慨博客网给予的巨大帮助,写篇文章也能帮助需要的人。
业务能力是关键的,刚开始不懂业务,领导交给一个标签程序,相关资料也没给全,只说了要做什么,开发很多后需求又变了,搞了很多麻烦事,这个确实应该信息采集准确无误,再开始写代码。在刚开始时就需要把资料补齐,补齐再动手编码。
正文:
在写代码之前,需要审视一下自己代码的逻辑理清楚了没,先不急写代码,最好能在纸上画个uml逻辑关系图,即使不画也要在电脑上还是纸上整理好思路,准备怎么实现思路每一步都写出来,然后执行页面->sql->数据库,当然数据库返回页面也是这个思路。
首先,整体页面布局用最简单的Gird布局(查看我整理好的相关Gird布局的用法,简单到直接复制到项目中使用)方式给整一下,再在整个布局中画控件,画控件可以去微软的Blend for Visual Studio 去画,也可以直接手撸代码。
关于HashTable的用法
在所有的控价整理好后,可以考虑把需要收集的页面的值装入一个HashTable中,如下:
1 private Hashtable myhashtable = new Hashtable();//存放界面元素存放的总表
这样很有好处,好处在于使用哈希表定义后,使用下面语法添加相关页面的各个值:
1 myhashtable.Clear();//清理所有键值对 2 myhashtable.Add("键名", 对应值); 3 myhashtable.Add(Key, Value); //添加键值
以下是hashtable的遍历和检索功能
遍历hashtable可以用到如下代码:
1 foreach (DictionaryEntry de in hashtable) //ht为一个Hashtable实例 2 { 3 MessageBox.Show(string.Format("{0},{1}",de.Key.ToString(),de.Value.ToString()));
//de.Key对应于keyvalue键值对key
4 }
也可以遍历值
//遍历值 foreach (string value in hashtable.Values) { messagebox.show(value); }
以上代码可以检查出hashtable中的每一个键值,用来检验hash表中相关的字段和值有没有出问题。
检查出没出问题了,那么就可以开始使用了,注意以下用法:
1 myhashtable["keyname"]//访问该键对应的值,这个无疑是重要的 2 myhashtable.remove("keyname")//移除指定的值 3 HashtableObject.Contains("kayname");// 判断是否包含特定键key 4 string value = myhashtable["keyname"] as string;//hashtable转换为字符串 5 string value = (string)myhashtable["keyname"] ;//hashtable转换为字符串
有时会用到排序:
//对哈希表进行排序 //对哈希表按key值重新排列的做法: ArrayList akeys=new ArrayList(myhashtable.Keys); akeys.Sort(); //按字母顺序进行排序 foreach(string key in akeys) { MessageBox.show(key + ": " + myhashtable[key]); //排序后输出 }
到此步HashTable已经把页面相关信息装好了,并且可以用上面提供的方法去使用装入表中的数据,接下来就是调用hash表中数据,形成SQL语句字符串再调用相应的AOD执行函数ExecuteQuery执行,执行后会返回一个DataTable类,这很明显不是我们想要的,我们需要一个返回HashTable的类ExecuteReturnHashQuery,现在把俩个函数载录一下,供需要的人去使用:
ExecuteQuery:
public static DataTable ExecuteQuery(string sql) { //略去连接字符串,打开连接,建立Command对象等基本操作,载录核心代码 cmd.CommandText = sql; SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt); cmd.Connection.Close(); return dt; }
ExecuteReturnHashQuery:
public static Hashtable ExecuteReturnHashQuery(string sql, Hashtable ht) { SqlCommand cmd = Cmd; cmd.CommandText = sql; SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt); cmd.Connection.Close(); //Datatable转Hashtable makehashtable.DTableToHashTable(dt,ht); return ht; }
ExecuteReturnHashQuery其中的DTableToHashTable函数:
public static Hashtable DTableToHashTable(DataTable dt, Hashtable hashtable) { DataRow row = dt.Rows[0];//专门用于一行数据的datatable对象转为相应的hashtable方便进行键值转换 for (int i = 0; i < row.Table.Columns.Count; i++) { hashtable.Add(row.Table.Columns[i].ColumnName, row[i].ToString()); } return hashtable; }
之后,把已经执行函数并且返回的hashtable调用下面函数保存入数据库:
public static void SaveHashToDb(Hashtable hashtable, string InsertTable) { int b = hashtable.Count; string[] fields = new string[b]; string[] values = new string[b]; for (int i = 0; i < b; i++) { foreach (DictionaryEntry de in hashtable) //ht为一个Hashtable实例 { fields[i] = de.Key.ToString(); //de.Key对应于keyvalue键值对key values[i] = de.Value.ToString(); //de.Key对应于keyvalue键值对value i++; } } //调用处理sql语句的SqlStringHelper类中的插入字段函数,该函数需要 字段名,字段值,要插入的表。 string insertsql = SqlStringHelper.MakeInsertSql(fields, values, InsertTable); SQLServerConnect.ExecuteNonQuery(insertsql); }
注意:SqlStringHelper.MakeInsertSql拼接sql语句可以使用,ExecuteNonQuery为执行非查询类的sql语句下面一并给出相关函数:
SqlStringHelper.MakeInsertSql方法:
1 public static string MakeInsertSql(string[] fields, string[] values, string table) 2 { 3 string strInsertFld = ""; 4 string strInsertVal = ""; 5 for (int i = 0; i < fields.Length; i++) 6 { 7 string key = fields[i]; 8 string val = values[i]; 9 if (val == null) val = ""; //为了容错性,将没有的参数都当做空 10 val = val.Replace("'", ""); //为了避免sql注入问题,将单引号全部去掉 11 12 strInsertFld += key + ","; 13 strInsertVal += "'" + val + "',"; 14 } 15 string strInsert = "insert into " + table + "( " + strInsertFld.TrimEnd(',') + " ) values (" + strInsertVal.TrimEnd(',') + ")"; 16 17 return strInsert; 18 }
ExecuteNonQuery
public static int ExecuteNonQuery(string sql) { SqlCommand cmd = Cmd; cmd.CommandText = sql; int result = cmd.ExecuteNonQuery(); cmd.Connection.Close(); return result; }
//略去连接字符串,打开连接,建立Command对象等基本操作,载录核心代码
最后把相关数据库绑定到界面中的DataGird上,只需要一句代码就能搞定:
DataGirdObject.ItemsSource = SQLServerConnect.ExecuteQuery(queryallsql).DefaultView;
ExecuteQuery函数:
public static DataTable ExecuteQuery(string sql) { SqlCommand cmd = Cmd; cmd.CommandText = sql; SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); adapter.Fill(dt); cmd.Connection.Close(); return dt; }
原文地址:https://www.cnblogs.com/CityLife/p/15196168.html
- 使用Beego+Swagger构建更好的API服务
- ASM无法启动的问题分析(二)(r7笔记第88天)
- 43. 等价二叉树 | 厚土Go学习笔记
- 51. Socket服务端和客户端使用TCP协议通讯 | 厚土Go学习笔记
- 50. RESTful API的简单实现 | 厚土Go学习笔记
- go实现西瓜视频花椒直播等平台智能答题
- 主备切换的准备工作(二) (r7笔记第85天)
- 49. 访问PostgreSQL数据库增删改查 | 厚土Go学习笔记
- Golang中Interface类型详解
- Go语言的网络编程简介
- 一条关于swap争用的报警邮件分析(二)(r8笔记第4天)
- Golang泛型编程初体验
- 厚土Go学习笔记 | 14. switch 的条件写的有点灵活,不过风格还是go的一贯风格
- Go语言·我的性能我做主
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring整合RMI
- Spring启用缓存
- 交通标识分类-TensorFlow实现
- Redis使用与操作k-v数据
- Spring集成Hadoop和Hbase
- JVM系列之:JIT中的Virtual Call接口
- 重新构建711的Android项目(二),架构的选择与实现
- Android的配置文件操作封装,摒弃SharedPreference操作配置漫天乱飞
- java实现PBOC的TLV格式解析,超简单的解析(全互联网最简单)
- 链表总计
- Spring整合MongoDb
- 正确使用Qt多线程
- Spring与hibernate与mybatis
- scala 模式匹配的几个模式
- Spring Security 认证