1

Ok。個々の WebMethods を呼び出している JQuery Ajax の投稿がいくつかあります。問題に遭遇したので、webmethods を 1 つに結合する必要がありますが、それでもリストに従って戻り値を分割することができます。したがって、たとえば、複数のリストを返すものが必要なため、Ajax 呼び出しでそれぞれの Jquery Datatables を表 1 = drList[0]、表 2 = drList[1] などのようにレンダリングできます。

Webmethod コードは以下のとおりです。

[WebMethod]
[ScriptMethod]
public static List<GlobalClasses.ValueDateSummary>  GetValueDateSummary()
{

    string TSQL = "SELECT * FROM vw_view1 WHERE (SenderBIC ='" +    HttpContext.Current.User.Identity.Name + "') ORDER BY ValueDate DESC";
    DataTable dtValueDateSummary = null;
    GlobalClasses.ValueDateSummary objSummary;

    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["MIReporting"].ConnectionString);
    using (conn)
    {
        conn.Open();
        using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(TSQL, conn))
        {
            dtValueDateSummary = new DataTable();
            sqlAdapter.Fill(dtValueDateSummary);
        }
    }
    List<GlobalClasses.ValueDateSummary> drList = new List<GlobalClasses.ValueDateSummary>();
    foreach (DataRow row in dtValueDateSummary.Rows)
    {
        objSummary = new GlobalClasses.ValueDateSummary();
        objSummary.fld1= row["1"].ToString();
        objSummary.fld2 = row["2"].ToString();
        objSummary.fld3 = row["3"].ToString();
        objSummary.fld5 = row["4"].ToString();

        drList.Add(objSummary);
    }
    return drList;
}

これと他の webmethod 呼び出しの唯一の違いは、使用されているビューです。

Ajax 呼び出しは次のとおりです。

           $.ajax({
               type: 'POST',
               url: 'Default.aspx/GetValueDateSummary',
               data: '{}',
               contentType: 'application/json;charset=utf-8',
               dataType: 'json',
               success: function (response) {

                 renderMsgSummary(response.d);
               },
               error: function (errMsg) {
                   $('#errorMessage').text(errMsg);
               }
           })

これrenderMsgSummaryは Jquery データテーブルであるため、次のようにする必要があります。

renderMsgSummary(response.d[0]);
renderOtherTable(response.d[1]);

OK - もう少しで、クライアント側のスクリプトをマージしようとしています。

     <script type="text/javascript">
       $(document).ready(function () {
           function renderMsgVal(result) {
               var dtMsgValData = [];
               $.each(result, function () {
                   dtMsgValData.push([
                       this.SenderBIC,
                       this.ValueDate,
                       this.MessageType,
                       this.Reference
                   ]);
               });

               function renderMsgSummary(result) {
                   var dtMsgSumData = [];
                   $.each(result, function () {
                       dtMsgSumData.push([
                           this.SenderBIC,
                           this.MessageDate,
                           this.MessageType,
                           this.Count
                       ]);
                   });

                   $('#tblValueDateSummary').dataTable({
                       "aaData": dtMsgValData,

                       "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100]]
                       'asStripClasses': null,
                       "iDisplayLength": 10,
                       //"aaSorting": [[0, "asc"]],
                       "bJQueryUI": true,
                       "bFilter": true,
                       "bAutoWidth": false,
                       "bProcessing": true,
                       // "sDom": 'RC<"clear">lfrtip',
                       "sDom": 'RC<"H"lfr>t<"F"ip>',

                       //Scrolling .......
                       "sScrollY": "250px",
                       "sScrollX": "100%",
                       "sScrollXInner": "100%",
                       "bScrollCollapse": true,

                       //Dynamic Language .......
                       "oLanguage": {
                           //"sZeroRecords": "There are no messages that match your,
                           "sLengthMenu": "Display _MENU_ records per,
                           "sInfo": "Displaying _START_ to _END_ of _TOTAL_ records",
                           "sInfoEmpty": "Displaying _START_ to _END_ of _TOTAL_m
                           "sInfoFiltered": "(filtered from _MAX_ total records)",
                           "sEmptyTable": 'No Rows to display.....!',
                           "sSearch": "Search all columns:",
                           "sLoadingRecords": "Please wait - loading..."
                       },
                       "oSearch": {
                           "sSearch": "",
                           "bRegex": false,
                           "bSmart": true
                       }
                   });

                   $('#tblMessageDateSummary').dataTable({
                       "aaData": dtMsgSumData,
                       "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100]]
                       "asStripClasses": null,
                       "iDisplayLength": 10,
                       "aaSorting": [[0, "asc"]],
                       "bJQueryUI": true,
                       "bFilter": true,
                       "bAutoWidth": true,
                       "bProcessing": true,
                       "sDom": 'RC<"clear">lfrtip',
                       //"sDom": '<"F"ip>l',


                       //Scrolling .......
                       "sScrollY": "250px",
                       "sScrollX": "100%",
                       "sScrollXInner": "100%",
                       "bScrollCollapse": true,

                       //Dynamic Language .......
                       "oLanguage": {
                           // "sZeroRecords": "There are no messages that match your,
                           "sLengthMenu": "Display _MENU_ records per,
                           "sInfo": "Displaying _START_ to _END_ of _TOTAL_ records",
                           "sInfoEmpty": "Showing 0 to 0 of 0 records",
                           "sInfoFiltered": "(filtered from _MAX_ total records)",
                           "sEmptyTable": 'No Rows to display.....!',
                           "sSearch": "Search all columns:"
                       },
                       "oSearch": {
                           "sSearch": "",
                           "bRegex": false,
                           "bSmart": true
                       }
                   });
               }


               $.ajax({
                   type: 'POST',
                   url: 'Default.aspx/GetMessageDetails',
                   data: '{}',
                   contentType: 'application/json;charset=utf-8',
                   dataType: 'json',
                   success: function (response) {
                       //console.log(response);
                       //alert(response.d);
                       renderMsgVal(response.d[0]);
                       renderMsgSummary(response.d[1]);
                   },
                   error: function (errMsg) {
                       $('#errorMessage').text(errMsg);
                   }
               });


       </script>

これが可能かどうかわからない?

4

2 に答える 2

1

私の理解が正しければ、あなたはList of Lists.

public static List<List<GlobalClasses.ValueDateSummary>> GetValueDateSummary()    
{
    var allLists = new List<List<GlobalClasses.ValueDateSummary>>();

    foreach (DataRow row in dtValueDateSummary.Rows)
    {
        objSummary = new GlobalClasses.ValueDateSummary();
        objSummary.fld1= row["1"].ToString();
        objSummary.fld2 = row["2"].ToString();
        objSummary.fld3 = row["3"].ToString();
        objSummary.fld5 = row["4"].ToString();

        drList.Add(objSummary);
    }   
    allLists.Add(drList);

    //add other lists to allLists
    //..

    return allLists;
}
于 2013-04-02T11:11:10.727 に答える
0

さまざまなリストをより大きなクラスにラップします

クラスを次のようにします

public class Wrapper
{
    public List<GlobalClasses.ValueDateSummary> list1 {get;set;}
    public List<GlobalClasses.ValueDateSummary> list2 {get;set;}
    public List<SomeOtherClassCollectino> list3{get;set;}
}

このラッパーを webmethod に返します。

[WebMethod]
[ScriptMethod]
public static List<GlobalClasses.ValueDateSummary>  GetValueDateSummary()
{
    // your db logic
    Wrapper wrapper = new Wrapper();

    List<GlobalClasses.ValueDateSummary> drList = new List<GlobalClasses.ValueDateSummary>();
    foreach (DataRow row in dtValueDateSummary.Rows)
    {
        objSummary = new GlobalClasses.ValueDateSummary();
        objSummary.fld1= row["1"].ToString();
        objSummary.fld2 = row["2"].ToString();
        objSummary.fld3 = row["3"].ToString();
        objSummary.fld5 = row["4"].ToString();

        drList.Add(objSummary);
    }
    wrapper.list1 =  drList;
    //similarly fetch other lists 
    //wrapper.list2 = drList2;
    return new JavaScriptSerializer().Serialize(wrapper);
}

クライアント側では、次のようにアクセスできます。

 var jsonData = $.parseJSON(msg.d);
 renderMsgSummary(jsonData.list1);
 renderMsgSummary(jsonData.list2);
于 2013-04-02T11:08:55.257 に答える