switch (dataTable.iSortCol_0) //iSortCol_0: Esta variable nos devuekve un entero con la posicion de la columna en la que se desea ordenar { case 0: { if (dataTable.sSortDir_0 == "asc")//sSortDir_0 Nos indica la forma de ordenacion ancendete o desendente { List = List.OrderBy(o => o.ID).ToList(); //Ordenamos utilizando Sintaxis LinQ sobre lalista estraida de Entityframework } else { List = List.OrderByDescending(o => o.ID).ToList(); //Ordenamos utilizando Sintaxis LinQ sobre lalista estraida de Entityframework } break; } case 1: { if (dataTable.sSortDir_0 == "asc")//sSortDir_0 Nos indica la forma de ordenacion ancendete o desendente { List = List.OrderBy(o => o.p_Numero).ToList(); //Ordenamos utilizando Sintaxis LinQ sobre lalista estraida de Entityframework } else { List = List.OrderByDescending(o => o.p_Numero).ToList(); //Ordenamos utilizando Sintaxis LinQ sobre lalista estraida de Entityframework } break; } default: break; }Usando la logica se debera usar una "case" por cada columna de nuestra tabla y es importante ordernarlo una ves que hallamos obtenido la informacion en bruto de nuestra tabla y para no ordenar solo los datos que estamos enviando de vuelta a la vista.
Ya que ando como loco metido buscando y solucionando problemas de informática tanto de programación como de TI en general, pondré aquí lo que me ha sido de utilidad y algunas preguntas por si alguno desea ayudamre ;). Espero que yo les sea de ayuda ...
viernes, 30 de enero de 2015
Funcion de ordenamiento DataTable jQuery con C# con ASP .NET Entitie Framework y MVC
Etiquetas:
.net,
aprendizaje,
ASP,
ASP.NET,
C#,
Entity Framework,
LinQ,
MVC
miércoles, 28 de enero de 2015
DataTable jQuery con C# con ASP .NET Entitie Framework y MVC
En la parte de Java Script:
<script language="JavaScript"> $(document).ready(function () { $('#table_id').DataTable(); }); </script>
Importando las librerias:
O de una carpeta local si es que hemos descargado las librerias ne nuestro proyecto
<script src="~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.js"></script>
Y el Razor generado automaticamente pro Visual Studio:
<table id="table_id" class="display"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.ID) </th> <th> @Html.DisplayNameFor(model => model.C_Clave) </th> <th> @Html.DisplayNameFor(model => model.C_NOMBRE) </th> <th> @Html.DisplayNameFor(model => model.C_RFC) </th> <th> @Html.DisplayNameFor(model => model.C_COMERCIAL) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.ID) </td> <td> @Html.DisplayFor(modelItem => item.C_Clave) </td> <td> @Html.DisplayFor(modelItem => item.C_NOMBRE) </td> <td> @Html.DisplayFor(modelItem => item.C_RFC) </td> <td> @Html.DisplayFor(modelItem => item.C_COMERCIAL) </td> <td> @Html.ActionLink("Editar", "Edit", new { id = item.ID }) | @Html.ActionLink("Detalles", "Details", new { id = item.ID }) | @Html.ActionLink("Eliminiar", "Delete", new { id = item.ID }) </td> </tr> } </tbody> <tfoot> </tfoot> </table>
Ahora bien si deseamos inicial izarla a través de Ajax con una función MVC el Javascript queda de esta forma:
$('#table_id').dataTable({ "sDom": "frtp", "bFilter": false, "bJQueryUI": true, "sPaginationType": "full_numbers", "bProcessing": true, "bServerSide": true, "bDestroy": true, "sAjaxSource": "/Controlador/FuncionDeLLenado", "aoColumnDefs": [ /* En esta seccion se definel a estructura del componente y las columnas */ { "bSearchable": false, "bVisible": false, "aTargets": [0] }, { "bVisible": false, "aTargets": [0] } ], "fnServerParams": function (aoData) { }, "fnRowCallback": function (nRow, aData, iDisplayIndex) { /* En esta seccion se puede personalizar la informacion que se desplegara en la tabla */ /* Usamos los valores que regresan para rellenar la columna con los links de funcion */ $('td:eq(10)', nRow).html('<a href=\"/Partes/Edit/' + aData[0] + '\">Editar</a> | ' + '<a href="/Partes/Details/' + aData[0] + '">Detalles</a> | ' + '<a href="/Partes/Delete/' + aData[0] + '">Eliminar</a> '); }, "fnServerData": function (url, data, callback) { $.ajax({ "url": url, "data": data, "success": callback, "dataType": "json", "type": "POST", // "cache": false, "error": function () { alert("DataTables warning: JSON data from server failed to load or be parsed. " + "This is most likely to be caused by a JSON formatting error."); } }); } });y la funcion desde el controlador requiere un modelo que recibe la informacion del componente Jquery modelo que definimos a continuacion:
public class jQueryDataTableParamModel { ////// Request sequence number sent by DataTable, /// same value must be returned in response /// public string sEcho { get; set; } ////// Text used for filtering /// public string sSearch { get; set; } ////// Number of records that should be shown in table /// public int iDisplayLength { get; set; } ////// First record that should be shown(used for paging) /// public int iDisplayStart { get; set; } ////// Number of columns in table /// public int iColumns { get; set; } ////// Number of columns that are used in sorting /// public int iSortingCols { get; set; } ////// Comma separated list of column names /// public string sColumns { get; set; } ////// Sort column /// public int iSortCol_0 { get; set; } ////// Asc or Desc /// public string sSortDir_0 { get; set; } }
Y ahora la Funcion en el controlador que llenara nuestra tabla mediante la pation ajax:
[HttpPost] public ActionResult FuncionDeLLenado(jQueryDataTableParamModel dataTable)//jQueryDataTableParamModel define las variables que enviarion desde el java script { try { //Aqui Extremos la informacion de la Base de Datos //En este caso se Saco con Entityframework 5.0 InventariosEntitys db = new InventariosEntitys(); //Inicio de conexion Listrows = db.NombreTabla.ToList(); if (rows != null)//Valida que la consulta traiga resultados { //Definimos y aplicamos los Filtros a los campos de la tabla //dataTable.sSearch define el valor que se teclea en el campo de busqueda var filteredRows = (from e in rows where (dataTable.sSearch == null || e.C_Clave.ToLower().Contains(dataTable.sSearch.ToLower()) //se aplicala funcion Contais para buscar los valores || e.C_Nombre.ToLower().Contains(dataTable.sSearch.ToLower())//junto con el or para que lo busque en cualquiera || e.C_RFC.ToLower().Contains(dataTable.sSearch.ToLower()) // de las columnas en las que se encuentre el valor ) select e).ToList(); var displayedRows = filteredRows .Skip(dataTable.iDisplayStart //dataTable.iDisplayStart: define donde estan iniciando los registros .Take(dataTable.iDisplayLength); //dataTable.iDisplayLength: define el tamaño dela paginacion DateTime dti = new DateTime(2014, 04, 1, 0, 0, 0); DateTime dtf = new DateTime(2014, 04, 30, 23, 59, 59); //Creamos el filtro final de la tabla enviando solo los datos que requerimos en la tabla de forma posicional //en un arreglo de String var result = from c in displayedRows select new List () { c.ID.ToString(), c.C_CALVE, c.C_NOMBRE, c.C_RFC, c.C_COMERCIAL }; table = result.ToList();//reconstruimos como una lista de Strings //Enviamos el resultado en formato Json de vuelata a la vista return Json(new { sEcho = dataTable.sEcho, iTotalRecords = rows.Count, iTotalDisplayRecords = filteredRows.Count, aaData = table }, JsonRequestBehavior.AllowGet); } else { //Enviamos el resultado en formato Json de vuelata a la vista //Se regresan valores nulos return new DataTableResult(dataTable.sEcho, rows.Count, 0, table); } } catch (Exception ex) { //Manejo de posilbes errores String result = "Error con el Mensaje:" + ex.Message; return Json(new { error = result }, JsonRequestBehavior.AllowGet); } }
Y ahora la Finalmente como debe mostrarse el codigo de la tabla en Razor:
<table id="table_id" class="display"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.ID) </th> <th> @Html.DisplayNameFor(model => model.C_Clave) </th> <th> @Html.DisplayNameFor(model => model.C_NOMBRE) </th> <th> @Html.DisplayNameFor(model => model.C_RFC) </th> <th> @Html.DisplayNameFor(model => model.C_COMERCIAL) </th> <th></th> </tr> </thead> <tbody> </tbody> <tfoot> </tfoot> </table>
Etiquetas:
.net,
aprendizaje,
ASP,
ASP.NET,
C#,
Entity Framework,
MVC
Suscribirse a:
Entradas (Atom)