65.9K
CodeProject 正在变化。 阅读更多。
Home

将 ASP.NET DataTable 转换为 JSON,以便在 JavaScript 中使用 DataTable

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.09/5 (13投票s)

2007 年 6 月 29 日

CPOL

2分钟阅读

viewsIcon

170324

downloadIcon

5587

这个类将帮助开发人员将其数据表转换为客户端 JavaScript 上随时可用的 JSON 字符串。

引言

Web 开发日新月异,从一开始就一直在变化。现在,每个开发人员都有自己的写作风格。有些人喜欢纯服务器端,有些人喜欢混合式。如今,JavaScript 就像市场上的一个繁荣景象。微软(Microsoft)实现它的方式是一项伟大的工作。

但是我们仍然有很多事情要做。在这里,我将演示一个示例,通过它可以将 ASP.NET DataTable 以两种方式转换为 JSON 字符串。它将非常有用,可以在 JavaScript 中使用。

这将解决开发人员如何在客户端以结构良好的方式使用服务器数据的问题。

背景

假设使用它的人对 JSON 以及如何在服务器中操作它有很好的了解。

代码

public string JSON_DataTable(DataTable dt)
{

    /****************************************************************************
    * Without goingin to the depth of the functioning
    * of this method, i will try to give an overview
    * As soon as this method gets a DataTable
    * it starts to convert it into JSON String,
    * it takes each row and ineach row it creates
    * an array of cells and in each cell is having its data
    * on the client side it is very usefull for direct binding of object to  TABLE.
    * Values Can be Access on clien in this way. OBJ.TABLE[0].ROW[0].CELL[0].DATA 
    * NOTE: One negative point. by this method user
    * will not be able to call any cell by its name.
    * *************************************************************************/

    StringBuilder JsonString = new StringBuilder();

    JsonString.Append("{ ");
    JsonString.Append("\"TABLE\":[{ ");
    JsonString.Append("\"ROW\":[ ");

    for (int i = 0; i < dt.Rows.Count; i++)
    {

        JsonString.Append("{ ");
        JsonString.Append("\"COL\":[ ");

        for (int j = 0; j < dt.Columns.Count; j++)
        {
            if (j < dt.Columns.Count - 1)
            {
                JsonString.Append("{" + "\"DATA\":\"" + 
                                  dt.Rows[i][j].ToString() + "\"},");
            }
            else if (j == dt.Columns.Count - 1)
            {
                JsonString.Append("{" + "\"DATA\":\"" + 
                                  dt.Rows[i][j].ToString() + "\"}");
            }
        }
        /*end Of String*/
        if (i == dt.Rows.Count - 1)
        {
            JsonString.Append("]} ");
        }
        else
        {
            JsonString.Append("]}, ");
        }
    }
    JsonString.Append("]}]}");
    return JsonString.ToString();
}

//b)
public string CreateJsonParameters(DataTable dt)
{
    /* /****************************************************************************
     * Without goingin to the depth of the functioning
     * of this method, i will try to give an overview
     * As soon as this method gets a DataTable it starts to convert it into JSON String,
     * it takes each row and in each row it grabs the cell name and its data.
     * This kind of JSON is very usefull when developer have to have Column name of the .
     * Values Can be Access on clien in this way. OBJ.HEAD[0].<ColumnName>
     * NOTE: One negative point. by this method user
     * will not be able to call any cell by its index.
     * *************************************************************************/

     StringBuilder JsonString = new StringBuilder();

    //Exception Handling
    if (dt != null && dt.Rows.Count > 0)
    {
        JsonString.Append("{ ");
        JsonString.Append("\"Head\":[ ");

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            JsonString.Append("{ ");
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                if (j < dt.Columns.Count - 1)
                {
                    JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + 
                          "\":" + "\"" + 
                          dt.Rows[i][j].ToString() + "\",");
                }
                else if (j == dt.Columns.Count - 1)
                {
                    JsonString.Append("\"" + 
                       dt.Columns[j].ColumnName.ToString() + "\":" + 
                       "\"" + dt.Rows[i][j].ToString() + "\"");
                }
            }

            /*end Of String*/
            if (i == dt.Rows.Count - 1)
            {
                JsonString.Append("} ");
            }
            else
            {
                JsonString.Append("}, ");
            }
        }

        JsonString.Append("]}");
        return JsonString.ToString();
    }
    else
    {
        return null;
    }
}

Using the Code

正如您所看到的,代码非常容易理解。这些函数随时可用。您可以在下载源代码部分找到完整的源代码。

使用 JSON_DataTable 方法

  1. 添加命名空间
  2. using Ravs.Factory.JSON;
  3. 创建对象
  4. JSON_Class Object_JSON_Class = new JSON_Class();
  5. 使用第一种情况 JSON
  6. Object_JSON_Class.JSON_DataTable(ProvideRequiredDataTable);

    在这里,上述方法将提供一个 JSON 字符串,您可以在客户端使用它。

  7. 现在将这些数据放在一个易于呈现给客户端以供进一步使用的地方。我将展示如何将其放入文本字段中(最容易的一种。)
  8. 在您的表单上放置一个服务器文本框。然后这样做

    ServerSideTextBox.Text= Object_JSON_Class. JSON_DataTable(ProvideRequiredDataTable);
  9. 在客户端.. 像这样使用 JavaScript
  10. <script type='text/javascript'> 
    var oServerSideTextBox= document.getElementbyId("ServerSideTextBox"); 
    var oServerJSON_String=eval("("+oServerSideTextBox .value+")"); 
    alert(oServerJSON.TABLE[0].ROW[0].COL[0].DATA); 
    // if alert comes with right Data then, CHEERS J 
    </script>

使用 CreateJsonParameters 方法

  1. 添加命名空间
  2. using Ravs.Factory.JSON; 
  3. 创建对象
  4. JSON_Class Object_JSON_Class = new JSON_Class(); 
  5. 使用第一种情况 JSON
  6. Object_JSON_Class.CreateJsonParameters (ProvideRequiredDataTable);

    在这里,上述方法将提供一个 JSON 字符串,您可以在客户端使用它。

  7. 现在将这些数据放在一个易于呈现给客户端以供进一步使用的地方.. 我将展示如何将其放入文本字段中(最容易的一种)
  8. 在您的表单上放置一个服务器文本框。然后这样做。

    ServerSideTextBox.Text= 
      Object_JSON_Class.CreateJsonParameters (ProvideRequiredDataTable);
  9. 在客户端.. 像这样使用 JavaScript
  10. <script type='text/javascript'> 
    var oServerSideTextBox= document.getElementbyId("ServerSideTextBox"); 
    var oServerJSON_String=eval("("+oServerSideTextBox .value+")"); 
    alert(oServerJSON.HEAD[0].AnyColumnName); 
    // if alert comes with right Data then, CHEERS J 
    </script>

注意:要了解更多信息,请查看源代码和演示项目。

干杯 :)

© . All rights reserved.