2013-12-02 8 views
6

Я новичок в JSON. Я создал образец, который возвращает String от WebMethod и присваивает значение, возвращаемое asp.net Label.Как вернуть DataTable из WebMethod с помощью JSON и JQuery в asp.net?

Пример JSON возвращения Строка:

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server"> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "JSONSample.aspx/DisplayData", 
      data: "{}", 
      dataType: "json", 
      success: function(data) { 
       //alert("hi"); 
       $("#ctl00_MainContent_lbltxt").text(data.d); 
      }, 
      error: function(result) { 
       alert("Error"); 
      } 
     }); 
    }); 
</script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server"> 

<label id="lbltxt" runat="server"></label> 
</asp:Content> 

В .cs файле (возвращение строки):

[WebMethod] 
    public static string DisplayData() 
    { 
     return DateTime.Now.ToString(); 
    } 

Это прекрасно работает.

Как связаться с DataTable используя JSON и JQuery?

[WebMethod] 
    public static DataTable DisplayData() 
    { 
     DataTable dt = new DataTable(); 
     return dt.GetData(); 
    } 

Я хочу вернуть DataTable и Свяжите GridView/Доступ к каждой строке DataTable с помощью JSON & JQuery. Пожалуйста, предложите мне правильный метод: ReturnDataTable, используя JSON.

Я видел пример с использованием handlers & какой-либо образец используя WebMethod. Какой из них использовать?

Каковы преимущества одного над другим.

Помогите оценить!

ответ

11

Вот как я обычно это делаю. Я загружаю содержимое данных в словарь, сериализую его и все работает. Вы можете изменить код в соответствии с вашими потребностями.

[WebMethod] 
    public string GetQueryInfo() 
    { 
    String daresult = null; 
    DataTable yourDatable = new DataTable(); 
    DataSet ds = new DataSet(); 
    ds.Tables.Add(yourDataTable); 
    daresult = DataSetToJSON(ds); 
    return daresult; 
    } 


    public string DataSetToJSON(DataSet ds) 
    { 

    Dictionary<string, object> dict = new Dictionary<string, object>(); 
    foreach (DataTable dt in ds.Tables) { 
    object[] arr = new object[dt.Rows.Count + 1]; 

    for (int i = 0; i <= dt.Rows.Count - 1; i++) { 
     arr[i] = dt.Rows[i].ItemArray; 
    } 

    dict.Add(dt.TableName, arr); 
    } 

    JavaScriptSerializer json = new JavaScriptSerializer(); 
    return json.Serialize(dict); 
    } 

На вашем aspx.

     $.ajax({ 
         type: "POST", 
         url: 'Webservices/GetQueryInfo', 
         data: {}, 
         contentType: "application/json; charset=utf-8", 
         dataType: 'json', 

         success: function (data) { 
          var objdata = $.parseJSON(data.d); 
         // now iterate through this object's contents and load your gridview 
          } 

        }); 

Есть много уроков о том, как загрузить вид сетки с помощью Java Script или jquery.This, по крайней мере, дать вам стартовый point.You может найти хороший пример here .чтобы сделать CRUD операция с GridView см. ссылку here

+0

hi @Abide Masaraure, после внесения некоторых изменений этот код работает. Но, я не могу связать GridView с этим возвращенным DataTable, пожалуйста, скажите мне, как это сделать? –

+0

Я обновил свой ответ ссылкой, на которую вы можете ссылаться. Как выглядит ваш возвращенный объект json. Сообщите мне, если вы не можете добавить строки в виде сетки. –

+0

Ох..Мы ответим мне, я сделал с тем же ..! Теперь, как передать CommandName и CommandArguments? –