Как реализовать обработку DataTable на стороне сервера в ASP. NET MVC путем вызова хранимой процедуры? - PullRequest
0 голосов
/ 06 марта 2020

Я хотел преобразовать данные, поступающие от метода контроллера действий (тип PartialView). Но чем больше я двигаюсь по ссылкам, я запутываюсь.

Код на стороне контроллера:

public PartialViewResult _GetStockInTransit(string Cdate, string State, string Zone, string Amrac, string Store, string Hierarchy, string Itemcategorycode, string Itemcode)
{
    List<StockInTransitGrid> res = new List<StockInTransitGrid>();

    try
    {
        if (State.Contains(','))
        {
            State = State.Replace(",", "','");
        }

        if (Zone.Contains(','))
        {
            Zone = Zone.Replace(",", "','");
        }

        // var dates = Utilities.GetDates(Cdate);
        res = objCommon.GetStockInTransitGrid(Cdate, State, Zone, Amrac, Store, Hierarchy, Itemcategorycode, Itemcode);

        if (res.Count == 0)
        {
            return PartialView();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return PartialView(res);
}

Это возвращается на Ajax вызов, и при успешном вызове я вызываю метод для инициализации метода DataTable.

Ajax вызов для вышеуказанной функции выглядит следующим образом:

$.ajax({
            url: '../Reports/_GetStockInTransit',
            data: {
                CDate: currentdate, State: stat, Zone: zon, Amrac: amr, Store: store, Hierarchy: hirarcy,
                Itemcategorycode: itemcatCode, Itemcode: code
            },
            success: function (data) {
                if ($.fn.DataTable.isDataTable('#tblstockInTransit')) {
                    $('#tblstockInTransit').DataTable().destroy();
                }
                $('#tblstockInTransit tbody').empty();
                $('#tblstockInTransit tbody').append(data);
                **initializeDataTable();**
                 LoadBreadCam();
            },
            error: function (jqXHR, textStatus, errorThrown) {
                  if (jqXHR.status == 500) {
                      alert('Internal error: ' + jqXHR.responseText);
                  } else {
                      alert('Unexpected error.');
                  }
              }
        });
});

Как вы можете видеть, я вызываю функцию initialize DataTable здесь. И, наконец, сама функция:

 function initializeDataTable() {
             $('#tblstockInTransit').DataTable({

                 responsive: true,
                 scrollX: true,
                 scrollY: true,
                 dom: 'frBtip',
                 buttons: [
                          {
                        extend: 'csv',
                              footer: true,
                             filename: function () { return '@ViewBag.Title' + (new Date()).getTime() },
                             sheetName: '@ViewBag.Title',
                             text: '<img src="../Template/img/icons/16/export-csv.png" width="32"/>',
                             titleAttr: 'Export to CSV',
                             title: '',
                             customize: function (csv) {
                                      var str = GetCustomiseOptionsForCSV();
                                      return str+csv;
                              },
                             exportOptions: {
                                      modifier: {
                                          search: 'none',
                                          order: 'applied'
                                      }
                              }
                    },
                     {
                         extend: 'excelHtml5',
                         footer: true,
                         filename: function () { return '@ViewBag.Title' + (new Date()).getTime() },
                         sheetName: '@ViewBag.Title',
                         text: '<img src="../Template/img/icons/16/Excel-icon.png" width="32"/>',
                         titleAttr: 'Export to Excel',
                         title: '',
                         customize: function (doc) {
                             GetCustomiseOptionsForExcel(doc)
                         },
                         exportOptions: {
                             modifier: {
                                 search: 'none',
                                 order: 'applied'
                             }
                         }
                     }
                 ],
                 info: true


            });
 }

Я понятия не имею, как реализовать здесь обработку на стороне сервера и когда я это сделал, предоставив такие параметры, как:

  • обработка: правда,
  • serverSide: true,

Я получаю ошибку

Невозможно установить свойство 'data' для null в va (jquery .datatables.min. js)

потому что, возможно, ajax источник, который я здесь не поставляю. Архитектура также является проблемой, но я не могу ее изменить. Любое мнение или дополнительную информацию, которую я могу дать. Но мне нужно знать, нужно ли нам снова давать ajax источник, когда я устанавливаю этот параметр на стороне сервера как true.

РЕДАКТИРОВАТЬ: добавление хранимой процедуры также:

public List<StockInTransitGrid> GetStockInTransitGrid(string Cdate,string State, string Zone, string Amrac, string Store, string Hierarchy, string Itemcategorycode, string Itemcode)
{

            List<StockInTransitGrid> stockInTransitList = new List<StockInTransitGrid>();

            DataTable data = new DataTable();
            SqlConnection con = new SqlConnection(CS);
            try
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("SP_Daksha_InTransit", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@cdate", Cdate);
                cmd.Parameters.AddWithValue("@state", State);
                cmd.Parameters.AddWithValue("@zone", Zone);
                cmd.Parameters.AddWithValue("@amrac", Amrac);
                cmd.Parameters.AddWithValue("@store", Store);
                cmd.Parameters.AddWithValue("@hierarchy", Hierarchy);
                if(Itemcode.Length!=0 || Itemcategorycode == "ALL")
                {
                    cmd.Parameters.AddWithValue("@itemcategorycode", DBNull.Value);
                }                
                else
                {
                    cmd.Parameters.AddWithValue("@itemcategorycode", Itemcategorycode.Replace("ALL",""));
                }

                if (Itemcode.Length > 0)
                {
                    cmd.Parameters.AddWithValue("@itemcode", Itemcode);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@itemcode", DBNull.Value);
                }




                SqlDataAdapter adp = new SqlDataAdapter();
                adp.SelectCommand = cmd;
                adp.Fill(data);

                stockInTransitList = Utilities.ConvertDataTable<StockInTransitGrid>(data);
            }

            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
            return stockInTransitList;
        }
...