使用WPF实现页面数据到数据库再绑定DataGird控件相关技术总结

时间:2021-08-28
本文章向大家介绍使用WPF实现页面数据到数据库再绑定DataGird控件相关技术总结,主要包括使用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