Semanas atrás echamos un vistazo por encima a Blazor UI Components, los componentes profesionales para Blazor de Syncfusion, y algún tiempo después revisamos más en detalle uno de los grandes protagonistas en el mundo de los componentes, los de creación de gráficas estadísticas o Charts.
Sin embargo, si hay un tipo de componentes que todos usamos de forma frecuente en nuestras aplicaciones profesionales son, sin duda alguna, los grids o rejillas de datos. Por esa razón, los componentes que de alguna forma simplifican su creación son probablemente los más populares en todas las suites profesionales o gratuitas, sea cual sea la tecnología en la que trabajemos.
En este post centraremos el foco en Blazor DataGrid, la propuesta de Syncfusion para crear interfaces de rejillas de datos de forma sencilla y eficaz para Blazor Server y WebAssembly.
Pero antes de empezar, recordad que, aunque se trata de un producto comercial, dispone de una licencia community bastante permisiva, que permite que en muchos casos podamos utilizar los componentes de forma totalmente gratuita.
Nota: lo que estás leyendo es un post patrocinado por Syncfusion, pero en ningún momento han revisado previamente o condicionado de alguna forma su contenido.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: blazor, blazorserver, blazorwasm, sponsored, syncfusion
Hace algunas semanas echamos un vistazo rápido a Blazor UI Components, la suite de componentes profesionales para Blazor proporcionada por Syncfusion.
Como vimos, se trata de una completa colección que soluciona las necesidades más habituales durante la creación de la interfaz de usuario de aplicaciones Blazor, tanto Server como WebAssembly. Más de 70 componentes que incluyen controles de entrada de datos, botones, calendarios, layouts, rejillas de datos o gráficas estadísticas, entre otros. Y lo mejor es que, aunque se trata de un producto comercial, su generosa licencia community permite que muchos podamos utilizarlos de forma totalmente gratuita.
Hoy vamos a profundizar un poco en los componentes de presentación de datos estadísticos, o Chart Components, que por su potencia, versatilidad y calidad del resultado merece un post en sí mismos.
Nota: lo que estáis leyendo es un post patrocinado por Syncfusion, pero en ningún momento han revisado previamente o condicionado de alguna forma su contenido.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: blazor, blazorserver, blazorwasm, componentes, sponsored, syncfusion
Muchas veces estas sentencias SQL generadas de forma automática y ejecutadas al servidor son fáciles de leer y entender, pero hay veces que EF traduce el LINQ a consultas SQL enormes, complejas, con escasa legibilidad y difícilmente reconocibles.
Seguro que alguna vez habéis tenido por delante una de estas complejas sentencias SQL generada por Entity Framework y os hubiera gustado saber en qué punto del código fue lanzada. Esto es muy frecuente, por ejemplo, cuando estamos monitorizando las consultas en ejecución con SQL Profiler, o al examinar las queries que consumen mayor número de recursos desde los paneles de Azure SQL.
En versiones "clásicas" de Entity Framework había que ingeniárselas para conseguirlo, pero, como podréis comprobar a continuación, en EF Core la cosa se ha simplificado bastante :)
Por si te lo perdiste...
- Lo que ocurre cuando desarrolladores diseñan interfaces de usuario (II)
José María Aguilar - Localizar errores de validación del binding en ASP.NET Core MVC
José María Aguilar
.NET / .NET Core
- Announcing .NET Core 3.0 Preview 6
Richard Lander - Delegates And Events In C#
Shadman Kudchikar - Complete Sudoku Game for Windows using VB.NET 2013
Hung, Han - Empty try with finally
Jiří Činčura - Migrating a Sample WPF App to .NET Core 3 Part 1 & Part 2
Mike Rousos - Tangled in .NET: Will 5.0 really unify Microsoft's development stack?
Tim Anderson - Customize object displays in the Visual Studio debugger YOUR way
Leslie Richardson - Conditional Ref, Ref ReadOnly, Ref Reassignment in C# 7.X
Brij Bhushan Mishra - Calling Cognitive Services OCR Service from a .NET Application
David Giard - Try the new System.Text.Json APIs
Immo Landwerth - How to Debug LINQ queries in C#
Michael Shpilt - La potencia de la Reflexión (Parte 1)
Jorge Turrado
Index
, junto con alguna cortesía del compilador, permitía la especificación de índices en arrays de forma muy sencilla. Veíamos cómo podíamos acceder a elementos concretos utilizando su posición en la colección, tanto contando desde el principio como desde el final:var primes = new[] { 2, 3, 5, 7, 11, 13, 17, 19 };
Index fromStart = 2; // = Index.FromStart(2) - conversión implícita
Index fromEnd = ^2; // = Index.FromEnd(2)
Console.WriteLine(primes[fromStart]); // 5
Console.WriteLine(primes[fromEnd]); // 17
Sin embargo, puede que a Index
por sí mismo tampoco le veáis demasiada utilidad... y así es. De hecho, su finalidad es más bien el dar soporte a rangos, una nueva característica de C#8 que nos permitirá referirnos a "porciones" de arrays o colecciones similares usando una sintaxis compacta e integrada en el lenguaje.Por si te lo perdiste...
- 32 Síntomas que indican que estás afectado por el desarrollo
José María Aguilar - Cargar automáticamente objetos del modelo en acciones ASP.NET Core MVC
José María Aguilar
.NET / .NET Core
- C#9 – Type classes y extensiones
Eduard Tomás - Supporting the community with WF and WCF OSS projects
Scott Hunter - Throwing ArgumentException and InvalidOperationException
Peter Mbanugo - dnSpy: A Decompiler for .NET and Windows applications
Nick Randolph - Serializing a PascalCase Newtonsoft.Json JObject to camelCase
Andrew Lock - An Interesting Case Of .NET Performance and Caching
Khalid Abuhakmeh - Extension Methods Guidelines in C# .NET
Michael Shpilt - C# : Task Parallel Library (TPL) with async await and TaskCompletionSource for async I/O operations
Siddharth Patel - What's better than ILDasm? ILSpy and dnSpy are tools to Decompile .NET Code
Scott Hanselman - Ignoring a Billion-Dollar Mistake is simply not an Option
Ian Bebbington - PDF File Writer C# Class Library (Version 1.24.0)
Uzi Granot - How Can We Efficiently Sort Socks with C#?
Matthew Jones - Clever little C# and ASP.NET Core features that make me happy
Scott Hanselman
Span<T>
.Como muchas otras características del lenguaje, se trata de algunos azucarillos sintácticos creados en torno a dos nuevos tipos añadidos a las bibliotecas básicas del framework: las estructuras
System.Index
y System.Range
. Por esta razón, para utilizar estos elementos no sólo es necesario disponer de nuevos compiladores, sino también de nuevas versiones del framework.Recordad que a día de hoy ya se puede probar C# 8 en Visual Studio 2019 o directamente desde la interfaz de línea de comandos de .NET Core.
Por si te lo perdiste...
- Validación de peticiones en ASP.NET, o cómo evitar el error “Request.Form peligroso”
José María Aguilar - Quizás no estés comparando con null de forma totalmente correcta
José María Aguilar
.NET / .NET Core
- ¿Es lo mismo string o String en un programa C#?
José Manuel Alarcón Aguín - Spying on .NET Garbage Collector with .NET Core EventPipes
Christophe Nasarre - Porting desktop apps to .NET Core
Olia Gavrysh - 8 Techniques to Avoid GC Pressure and Improve Performance in C# .NET
Michael Shpilt - Debugging System.AggregateException
Thomas Ardal - How to Build .NET Strings at Run Time
Peter Vogel - Candidate Features For C# 9
Bassam Alugili - Extension Methods Are Easy with C#
Dirk Strauss - Let's talk about mapping objects in C#
Josef Ottosson - Shipping Pseudocode to Production
Dobromir Nikolov - Unexceptional non-blocking task-based flow control in .NET
Szymon Kulec - You can stop mocking ILogger
Joseph Woodward
Esta capacidad abre posibilidades bastante interesantes,que no eran tan inmediatas (o en algunos casos, ni siquiera posibles de forma directa) en versiones "clásicas" de Entity Framework, o EF Core anterior a 2.1. Gracias a ella podremos, por ejemplo, tener en nuestra entidad una propiedad de tipo enum mapeada a una cadena de caracteres en el almacén de datos, o introducir cualquier lógica de transformación, como podría ser la desencriptación y encriptación de valores, a la hora de leer y persistir información.
Por si te lo perdiste...
- Parámetros opcionales: úsense con precaución
José María Aguilar - ¿Aplicar [Authorize] a todos los controladores MVC de una carpeta?
José María Aguilar
.NET / .NET Core
- Is it better to "!= 0” or ”== mask” when working with enums (C#, RyuJIT)
Jiří Činčura - WinForms - Single-File Applications With .NET Core 3
DevExpress Blogs - Default implementations coming to interfaces with C# 8
Gunnar Peipman - Como instalar un servicio Net Core en Linux
Jorge Turrado - Profiling .NET Core Memory Traffic using JetBrains dotMemory
Steve Gordon - The Uri composition mystery
João Antunes - HttpClient: How to remove charset from Content-Type header
Gunnar Peipman - Making Sense of .NET 5
Bill Reiss - Moving from Node.js to .NET Core
Jim Wang - Be careful of lazy dependencies
Nigel Sampson - Null No More
Simon Timms - Cross-Platform Selenium with DotNet Core
Andy R. Blank - Lying to the compiler
Jon Skeet - Analysing the Large Object Heap in JetBrains dotMemory
Steve Gordon
using
, utilizada tanto en forma de directiva como de instrucción, es una de las más sobrecargadas del lenguaje C#. Es útil para bastantes cosas, como la importación de espacios de nombres, definición de alias de namespaces o tipos, simplificar el acceso a miembros de tipos estáticos, o para especificar bloques o ámbitos de uso de recursos (objetos IDisposable
) que deben ser liberados automáticamente.Centrándonos en este último caso de uso, seguro que en muchas ocasiones habéis escrito código como el siguiente, donde vamos anidando objetos
IDisposable
para asegurar que al finalizar la ejecución de cada bloque los recursos sean liberados de forma automática:void DoSomething()
{
using(var conn = new SqlConnection(...))
{
connection.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "...";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
}
}
Al final, lo que encontramos es código con un nivel de indentación muy alto, y que resulta muy extenso, básicamente porque una gran parte de las líneas las dedicamos sólo a abrir y cerrar llaves. A la postre, esto sólo hace que nuestro código crezca a lo ancho, lo cual no es bueno desde el punto de vista de la simplicidad y facilidad de lectura.Por si te lo perdiste...
- Consejos imprescindibles por si algo falla
José María Aguilar - BenchmarkDotNet: Arañando microsegundos en proyectos .NET Core o .NET Framework
José María Aguilar
.NET / .NET Core
- .NET Developer Updates from Build 2019
Sam Basu - Performance Improvements in .NET Core 3.0
Stephen Toub - .NET Core May 2019 Updates - 1.0.16, 1.1.14, 2.1.11 and 2.2.5
Lee Coward - Switch Expressions and Pattern-Based Usings – A Look at New Language Features in C# 8
Matthias Koch - Top 3 Features in C# 8 that will change the way you write code
Chris Pietschmann - .NET Core Global Tools - (What are Global Tools, How to Create and Use them)
Damir Arh - Default implementations in interfaces
Mads Torgersen - Cache Implementations in C# .NET
Michael Shpilt - C# : 6 Cool Language Features That You Rarely Use
Siddharth Patel - Modernize Your C# Code
Florian Rappl - Introducing the Try .NET Global Tool - interactive in-browser documentation and workshop creator
Scott Hanselman - Create Interactive .NET Documentation with Try .NET
Maria Naggaga - Creating Strings with No Allocation Overhead Using String.Create
Steve Gordon
En versiones anteriores a EF Core 2.1 y todos sus antecesores "clásicos", un problema que era difícilmente salvable era la necesidad de que en las entidades existiera un constructor público sin parámetros.
Esto tenía sentido, pues debíamos proporcionar al framework una vía para crear las instancias al materializarlas desde el almacén de datos. De hecho, al materializar, el marco de trabajo usaba dicho constructor para crear la instancia, y luego iba poblando las propiedades una a una utilizando sus setters (o estableciendo el valor de sus backing fields, como vimos en un post anterior)
Por si te lo perdiste...
- Cómo adaptarse a la RGPD con ASP.NET Core
José María Aguilar - ¿Esa enumeración está vacía?
José María Aguilar
.NET / .NET Core
- .NET Core is the Future of .NET
Scott Hunter - Introducing .NET 5
Richard Lander - Announcing .NET Core 3.0 Preview 5
Richard Lander - Declarative Coding Approach to Caching in .NET Core with PostSharp
Tugberk Ugurlu - Announcing .NET Core 3.0 Preview 5
Richard Lander - Introducing diagnostics improvements in .NET Core 3.0
Sourabh Shirhatti - Your .NET 5 Questions Answered (Kinda Sorta), Part 1: WCF
David Ramel - NLog: Rules and filters
Ivan Yakimov - Default timeouts in .Net code. What are they if you do not specify?
Chris F Carroll - Automatically Detect Expiring HTTPS SSL Certificates
Steve Smith - Looking back at Some of the Changes in C# 6
George Stocker - Cómo crear un servicio Net Core multiplataforma
Jorge Turrado
ASP.NET / ASP.NET Core
- ASP.NET Core updates in .NET Core 3.0 Preview 5
Brady Gaster - Simple custom authentication with ASP.NET Core
Gunnar Peipman - The backend for frontend and the HttpClient
João Antunes - Consuming a GraphQL API with ASP.NET Core
Marinko Spasojevic - Safely migrating passwords in ASP.NET Core Identity with a custom PasswordHasher
Andrew Lock - Simple Authentication In Razor Pages Without A Database
Mike Brind - Comparing Native Blazor Components
Ed Charbeneau - ASP.NET Core Blazor game development using .Net core 3.0 preview,Web API and Visual Studio 2019
Syed Shanu - Handling Access Tokens for private APIs in ASP.NET Core
Damien Bowden - Assembly version tag helper for ASP.NET Core
Gunnar Peipman
Y hasta aquí la píldora cultural del día, ahora vamos a lo importante :D
Publicado por José M. Aguilar a las 8:15 a. m.
Etiquetas: aniversario, autobombo, sponsored, variablenotfound
Ya llevamos varios posts dedicados a comentar algunas características novedosas o que cambian bastante respecto a las versiones anteriores (como la evaluación en cliente o las shadow properties, y vamos a continuar en esta línea presentando ahora otra interesante novedad: el soporte para campos de respaldo o backing fields.
Por si te lo perdiste...
- Problem Details: una forma estándar de retornar errores desde APIs HTTP (y cómo usarlo desde ASP.NET Core)
José María Aguilar - ¿ActionLink te genera direcciones que acaban en Length=N?
José María Aguilar
.NET / .NET Core
- MediatR 7.0.0 Released
Jimmy Bogard - Cómo crear operadores personalizados para clases propias en C#
Jorge Turrado - Serializing objects to URL encoded form data
Gunnar Peipman - Compare .NET Thread Class, Threadpool Class, BackgroundWorker Class and Task Parallel Library
Artemakis Artemiou - Lessons Learnt: Migrating From Net Framework to Net Core
Michael James - .NET Regex: \d is different from [0-9]
Gérald Barré - Performance Showdown of Producer/Consumer (Job Queues) Implementations in C# .NET
Michael Shpilt - .NET Core 3.0 SDK Projects: Controlling Output Folders and Content
Rick Strahl - PDF417 Barcode Decoder .NET Class Library and Two Demo Apps
Uzi Granot - Pattern Matching in C# 8.0
Filip Ekberg - Throwing Standard Exception Types in .NET
Peter Mbanugo - Async-Async: Consequences for parameters to parallel asynchronous calls & Async-Async: Consequences for exceptions
Raymond Chen
Por si te lo perdiste...
- 30 Leyes epónimas relacionadas con el desarrollo de software (I)
José María Aguilar - El filtro [ApiController] en ASP.NET Core MVC 2.1
José María Aguilar
.NET / .NET Core
- Announcing the .NET Framework 4.8
Namrata Karnam - Announcing .NET Core 3 Preview 4
Richard Lander - Upcoming Updates for .NET Framework 4.8
Brett Lopez - Introducing .NET for Apache® Spark™ Preview
Ankit Asthana - AutoMapper 8.1.0 Released
Jimmy Bogard - HTTP Live Streaming (HLS-VOD)
Shashangka Shekhar - Smooth Transactions with TransactionScope
Rion Williams - Commit Your Scripts
K. Scott Allen - Global State in C# Applications - Part 1
Yacoub Massad - Migrating Net Framework to Netcore
Chris F Carroll - Creating a Faster HashSet for .NET
Peter Devo - Implementing Indexers in C#
Peter Mbanugo - 6 Easy Ways to Export Data to Excel in C#
Johnson Manohar - Adventures in .NET Core SDK Installation: Missing SDKs and 32 bit vs 64 bit
Rick Strahl - ASCII Art in .NET Code
Matt Warren - Indices, Ranges, and Null-coalescing Assignments - A Look at New language features in C# 8
Matthias Koch - 7 Debugging Techniques for when your .NET application Freezes (hangs)
Michael Shpilt - First Steps in porting Markdown Monster WPF App to .NET Core 3.0
Rick Strahl - What types should I use to pass collections in C#?
Mark Heath - C# Operators: A Detailed Guide to All Of Them
Phil Vuollet - Writing to CSV-file from multiple threads
Gunnar Peipman - Multi-targetting .Net Framework and .Net Core in a single project
Chris F. Carroll - C# 8: Using statement
Olivier Giss - Explicit Interface Implementation with C#
Christian Nagel - Sharing Context in MediatR Pipelines
Jimmy Bogard - Pulling Objects from Web Services with ReadAsAsync
Peter Vogel - Creating Sample Data for C#
Bruno Sonnino - Using await using (IAsyncDisposable) with ConfigureAwait & Extravaganza using ConfigureAwait, await and await foreach
Jiří Činčura - Diferencias entre conversiones implícitas y explícitas en C# y cómo crear conversiones propias
Jorge Turrado