【项目经验】DataTable与JSON之间的转换

简介: <p><span style="font-family:楷体; font-size:19px; line-height:27px; widows:auto"><strong>【项目需求】</strong></span></p> <div style="font-family:楷体; font-size:19px; line-height:27px; widows:auto"><span

【项目需求】

    问卷调查的制作学生端已经完成了,下一步要做的便是后台对问卷结果的管理。通过和老师的沟通,了
解到老师想要的结果是按专业查询的结果,而其中包括两门课程。所以,接下来的工作便很明确了。
【项目设计】

    对问卷结果的回收内容明确之后,第一项工作便是页面的设计。如下:


    在导航栏新增对此次问卷调查的菜单,其下包括三个子菜单,也就是本次问卷包含的三种题型,分开查询。每个页面,通过课程与专业的选择,进行问卷结果的查询。

【项目开发】
    本次项目开发的具体步骤不一一写下来了,思路是一致的。即前台页面通过已有的课程名和专业名去数 据库进行查询,查询的结果用的是DataTable盛放的,而前台能够接收到的数据类型应该是Json格式的, 最后在前台显示的还是Table。这么一说,好像很糊涂,那么就看看下面的一张图:

【代码实现】
    下面,跟着上面的一条线,看看部分关键代码。
   (1)D层,写的是一个根据课程名称和专业名称查询对应的问卷结果:
        /// <summary>
        /// 根据专业课程查询单选结果——胡志婷——2016年1月8日09:32:03
        /// </summary>
        /// <param name="courseName">课程信息</param>
        /// <param name="majorName">专业信息</param>
        /// <returns>DataTable</returns>
        public DataTable QuerySingleAnswerBymajorName(string courseName,string majorName)
        {
            //按对应的课程专业查询单选题下学生的选项及各个选项所选的人数
            string sql = "select singleAnswer,singleChoiceContext,singleOptionContext,count(singleAnswer) as count from V_SingleAnswerInfo where majorName=@majorName and courseName=@courseName and singleAnswer=singleOptionID Group by singleAnswer,singleChoiceContext,singleOptionContext order by singleChoiceContext";
            //参数,课程和专业信息
            SqlParameter[] para=new SqlParameter[]{
                new SqlParameter("@majorName",majorName.Trim()),
                new SqlParameter("@courseName",courseName.Trim())
            };
            //执行带参数查询的方法
            DataTable dt =sqlHelper .ExecuteQuery(sql,para,CommandType.Text);
            //返回查询结果
            return dt;
        }
    (2)B层,将D层查询到的结果返回。
	/// <summary>
        /// 根据专业课程查询单选结果——胡志婷——2<span style="font-family: 楷体; widows: auto;">016年1月8日</span><span style="widows: auto; font-family: 楷体;">09:29:53</span>
        /// </summary>
        /// <param name="courseName">课程信息</param>
        /// <param name="majorName">专业信息</param>
        /// <returns>DataTable</returns>
        public DataTable QuerySingleAnswerBymajorName(string courseName, string majorName)
        {
            //声明表对象
            DataTable dt = new DataTable();
            //执行查询
            dt = new SingleDAL().QuerySingleAnswerBymajorName(courseName, majorName);
            //返回结果
            return dt;
        }
   (3)一般处理程序,将DataTable转换为Json字符串。
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //问卷单选答案实体
            SingleAnswerEntity singleanswerentity = new SingleAnswerEntity();
            //课程信息
            singleanswerentity.CourseName = context.Request.QueryString["courseName"].ToString();
            //专业信息
            singleanswerentity.MajorName=context.Request.QueryString["majorName"].ToString();
            //根据专业课程查询单选信息答案方法
            DataTable dtSingleAnswer = new StaticticalTeacherScoresBLL().QuerySingleAnswerBymajorName(singleanswerentity.CourseName, singleanswerentity.MajorName);
            //实例化DataTable与JSON间转换的业务逻辑类
            DatatableAndJsonBLL datatableAndJsonBLL = new DatatableAndJsonBLL();
            //调用DataTable转换为JSON方法
            string strJSON = datatableAndJsonBLL.DataTable2Json(dtSingleAnswer);
            context.Response.Write(strJSON);
        }
     (4)DataTableAndJsonBLL业务逻辑层下的DataTableToJson方法。
      /// <summary>
      /// 将DataTable数据转换为Json字符串——胡志婷——2016年1月6日14:29:10
      /// </summary>
      /// <param name="dt">DataTable</param>
      /// <returns>JSON string</returns>
      public string DataTableToJson(DataTable dt)
      {
         //实例化一个可变的字符序列
          StringBuilder jsonBuilder = new StringBuilder(); 
         //开始给字符序列附加字符     
          jsonBuilder.Append("[");
          for (int i = 0; i < dt.Rows.Count; i++)
          {
              jsonBuilder.Append("{");
              for (int j = 0; j < dt.Columns.Count; j++)
              {
                  jsonBuilder.Append("\"");
                  jsonBuilder.Append(dt.Columns[j].ColumnName);
                  jsonBuilder.Append("\":\"");
                  jsonBuilder.Append(dt.Rows[i][j].ToString());
                  jsonBuilder.Append("\",");
              }
              jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
              jsonBuilder.Append("},");
          }
          jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
          jsonBuilder.Append("]");
          return jsonBuilder.ToString();
      }  
     (5)AJAX将接收到的JSON字符串进行处理
        <script type="text/javascript">
        //查询单选题答案——胡志婷——2016年1月8日09:49:55
        function QuerySingleAnswer()
        {
            var courseName = document.getElementById("dropCourse").value; 
            var majorName = document.getElementById("dropCollege").value; 
            if (courseName == "" || majorName == "") {
                alert("请先选择信息!");
                return null;
            }
            $.ajax({
                type:"GET",
                //执行一般处理程序下的方法
                url:"handler/QuerySingleAnswer.ashx?courseName=" + courseName +  "&majorName=" + majorName,
                success: function (strJSON) {               
                    while (strJSON.indexOf("\r\n") >= 0)
                        strJSON = strJSON.replace("\r\n", "\\r\\n");
                    //将JSON字符串转换为JSON对象
                    var obj = eval(strJSON);
                    $("#suggestionTable tr").eq(1).removeClass("contentDisplay"); //移除模板行的样式
                    $("#suggestionTable tr").eq(1).nextAll().remove();        //将标题行的tr删除 这里指的是删除第二个tr
                    //依次遍历获得的json数据,向数据表table中动态加载数据
                    for (var i = 0; i < obj.length; i++) {
                        // clone() 方法生成被选元素的副本,包含子节点、文本和属性。
                        var row = $("#content").clone();
                        //单选题内容
                        row.find("#SingleFirst").text(obj[i].singleChoiceContext);
                        row.find("#SingleSecond").text(obj[i].singleOptionContext);
                        row.find("#SingleThird").text(obj[i].count);
                        //将新行添加到建议表中
                        row.appendTo("#suggestionTable");
                    }
                    //添加模板列的css样式
                    $("#suggestionTable tr").eq(1).addClass("contentDisplay");              
                },
                //返回数据失败,弹出错误显示
                error: function (XmlHttpRequest, textStatus, errorThrown)                   {
                    alert(XmlHttpRequest.responseText);
                  }
            });
            return false;
        }
       
    </script>
   (6)最后,我们在前台就可以看到查询到的结果了。
    
【项目总结】
     其实, 我们不仅仅可以将DataTable转换为JSON返回到前台,同样也可以将JSON转换 为DataTable存储到后台,在这里就不贴代码了。 
     一直以来,项目中的实现都是在已有的模板代码下进行实践的,所以对于代码的理解,对于思路的理解,自己并没有好好理会过。所处的状态好像是,虽然功能实现了,但具体的逻辑或者实现过程自己并没有做到心中有数吧。
      通过这一次的维护实践,才让我接触到了DataTable与JSON之间的转换,这好像让自己恍然大悟,有时间可以把各种项目的代码都好好看看,对于代码的理解也是需要慢慢培养和积累的。
   

目录
相关文章
|
JSON JavaScript 前端开发
DataTable 转换成 Json的3种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List、DataTable转换为Json格式。特别在使用Extjs框架的时候,Ajax异步请求的数据格式就是Json。
1502 0
|
JSON 前端开发 数据格式
.NET 构造DataTable返回多个json值
有时候我们使用Ajax链接一般处理程序需要返回多个值,然而这些数据并非在一个查询表内,此时便想到构造一个虚拟的DataTable,这样就可以返回多个值了(当然有很多办法,这是其中一种 )。
1166 0
|
JSON API 数据格式
把DataTable转换为泛型List<T>或是JSON
原文:把DataTable转换为泛型List或是JSON 在开发ASP.NET Web API或ASP.NET MVC时,我们从数据库得到的数据往往是DataSet或是DataTable。为了能让前端JQuery能方便使用至这些数据,我们需要把这些数据转换为泛型List或是JSON。
1241 0
|
JSON 数据格式 C#
C#中的DataSet、string、DataTable 、对象转换成Json
/// &lt;summary&gt; /// 提供方法将其他类型转换为Json /// &lt;/summary&gt; public static class ConvertToJson { #region 私有方法 /// &lt;summary&gt; /// 过滤特殊字符 ///
1278 0
|
JSON C# 数据格式
C# DataTable 转换成JSON数据
原文:C# DataTable 转换成JSON数据   using System; using System.Collections.Generic; using System.Data; using System.
1347 0
|
JSON 数据格式
泛型集合、datatable常用数据类型转换Json帮助类
泛型集合、datatable常用数据类型转换Json帮助类 using System; using System.Data; using System.
894 0
|
JSON 数据格式
把DataTable 转换成Json格式,适用于EasyUI 绑定DataGrid
本文转载:http://www.cnblogs.com/liang--liang/archive/2013/02/05/2893030.html public static string DataTable2Json(System.
1016 0
|
XML JSON 数据格式
DataTable ,XML和JSON相互转化
网上搜集的,保留下来了,有需要的拿去!private string DataTable2Xml(DataTable dt) { StringBuilder xmlBuilder = new StringBuilder(); xmlBuilder.
864 0
下一篇
DataWorks