AYUDA .NET

C# DataTable (Tutorial de Funcionamiento para Desarrolladores)

Actualizado 8 de mayo, 2023
Compartir:

Bienvenido a este tutorial sobre C# DataTables. Una DataTable es una potente estructura de datos proporcionada por el framework .NET, que permite almacenar, manipular y consultar datos en formato tabular. En este tutorial, exploraremos los conceptos básicos de DataTables en C#, incluyendo la creación y modificación de DataTables, la adición de columnas y filas, la consulta de datos, y el uso de DataView para filtrar y ordenar.

Al final de este tutorial, usted tendrá una buena comprensión de cómo utilizar DataTables en sus aplicaciones C#. Comencemos!

Creación de una DataTable

Para crear una DataTable en C#, primero hay que importar el espacio de nombres System.Data. Este espacio de nombres contiene varias clases y métodos relacionados con la manipulación de datos, incluyendo la clase DataTable.

 using System.Data;
 using System.Data;
Imports System.Data
VB   C#

A continuación, puede crear una instancia de la clase DataTable. La forma más sencilla de hacerlo es utilizando el constructor por defecto, así:

DataTable dt = new DataTable();
DataTable dt = new DataTable();
Dim dt As New DataTable()
VB   C#

También puedes crear una DataTable con un nombre específico pasando un parámetro de cadena al constructor:

DataTable dt = new DataTable("Employees");
DataTable dt = new DataTable("Employees");
Dim dt As New DataTable("Employees")
VB   C#

Métodos de DataTable

Añadir columnas

Una vez que haya creado una DataTable, puede empezar a añadirle columnas. Para añadir una columna, primero hay que crear una instancia de la clase DataColumn y establecer sus propiedades, como ColumnName y DataType.

He aquí un ejemplo de cómo añadir tres columnas a una DataTable:

DataColumn idColumn = new DataColumn("Id", typeof(int));
DataColumn nameColumn = new DataColumn("Name", typeof(string));
DataColumn ageColumn = new DataColumn("Age", typeof(int));

dt.Columns.Add(idColumn);
dt.Columns.Add(nameColumn);
dt.Columns.Add(ageColumn);
DataColumn idColumn = new DataColumn("Id", typeof(int));
DataColumn nameColumn = new DataColumn("Name", typeof(string));
DataColumn ageColumn = new DataColumn("Age", typeof(int));

dt.Columns.Add(idColumn);
dt.Columns.Add(nameColumn);
dt.Columns.Add(ageColumn);
Dim idColumn As New DataColumn("Id", GetType(Integer))
Dim nameColumn As New DataColumn("Name", GetType(String))
Dim ageColumn As New DataColumn("Age", GetType(Integer))

dt.Columns.Add(idColumn)
dt.Columns.Add(nameColumn)
dt.Columns.Add(ageColumn)
VB   C#

Puede añadir varias columnas como la columna Id en la tabla de datos.

Añadir filas de datos

Una vez definidas las columnas, puede empezar a añadir filas a la DataTable. Para añadir una fila, es necesario crear una nueva instancia de la clase DataRow y rellenar sus campos con los datos requeridos.

He aquí un ejemplo de cómo añadir una nueva fila a una DataTable:

DataRow newRow = dt.NewRow();

newRow ["Id"] = 1;
newRow ["Name"] = "John Doe";
newRow ["Age"] = 30;

dt.Rows.Add(newRow);
DataRow newRow = dt.NewRow();

newRow ["Id"] = 1;
newRow ["Name"] = "John Doe";
newRow ["Age"] = 30;

dt.Rows.Add(newRow);
Dim newRow As DataRow = dt.NewRow()

newRow ("Id") = 1
newRow ("Name") = "John Doe"
newRow ("Age") = 30

dt.Rows.Add(newRow)
VB   C#

También puede añadir varias filas de DataTable a la vez utilizando el mismo método en un bucle.

for (int i = 1; i <= 3; i++)
{
    DataRow row = dt.NewRow();
    row ["Id"] = i;
    row ["Name"] = "Employee " + i;
    row ["Age"] = 20 + i;
    dt.Rows.Add(row);
}
for (int i = 1; i <= 3; i++)
{
    DataRow row = dt.NewRow();
    row ["Id"] = i;
    row ["Name"] = "Employee " + i;
    row ["Age"] = 20 + i;
    dt.Rows.Add(row);
}
For i As Integer = 1 To 3
	Dim row As DataRow = dt.NewRow()
	row ("Id") = i
	row ("Name") = "Employee " & i
	row ("Age") = 20 + i
	dt.Rows.Add(row)
Next i
VB   C#

En el código anterior, hemos añadido tres filas de datos.

Acceso a los datos

Puedes acceder a los datos almacenados en una DataTable iterando a través de sus colecciones Rows y Columns. He aquí un ejemplo de cómo mostrar el contenido de una DataTable en la consola:

foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn col in dt.Columns)
    {
        Console.Write(row [col] + "\t");
    }
    Console.WriteLine();
}
foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn col in dt.Columns)
    {
        Console.Write(row [col] + "\t");
    }
    Console.WriteLine();
}
Imports Microsoft.VisualBasic

For Each row As DataRow In dt.Rows
	For Each col As DataColumn In dt.Columns
		Console.Write(row (col) & vbTab)
	Next col
	Console.WriteLine()
Next row
VB   C#

Modificación de datos

Puede modificar los datos de una DataTable actualizando los valores de sus objetos DataRow. He aquí un ejemplo de cómo actualizar la edad de un empleado concreto:

DataRow employeeRow = dt.Rows.Find(1); //  Buscar la fila con la clave primaria especificada
if (employeeRow != null)
{
    employeeRow ["Age"] = 35;
}
DataRow employeeRow = dt.Rows.Find(1); //  Buscar la fila con la clave primaria especificada
if (employeeRow != null)
{
    employeeRow ["Age"] = 35;
}
Dim employeeRow As DataRow = dt.Rows.Find(1) '  Buscar la fila con la clave primaria especificada
If employeeRow IsNot Nothing Then
	employeeRow ("Age") = 35
End If
VB   C#

Borrar filas

Puede eliminar una fila de una DataTable llamando al método Delete de un objeto DataRow:

DataRow employeeRow = dt.Rows.Find(1);
if (employeeRow != null)
{
    employeeRow.Delete();
    dt.AcceptChanges(); //  Confirmar la eliminación
}
DataRow employeeRow = dt.Rows.Find(1);
if (employeeRow != null)
{
    employeeRow.Delete();
    dt.AcceptChanges(); //  Confirmar la eliminación
}
Dim employeeRow As DataRow = dt.Rows.Find(1)
If employeeRow IsNot Nothing Then
	employeeRow.Delete()
	dt.AcceptChanges() '  Confirmar la eliminación
End If
VB   C#

Tenga en cuenta que llamar a Delete en una DataRow sólo marca la fila para su eliminación. Necesitas llamar al método AcceptChanges en la DataTable para eliminar permanentemente las filas borradas.

Gestión de varias tablas

En algunos casos, puede que necesite trabajar con varias tablas de datos simultáneamente. Puede crear una variable dataset para almacenar varios objetos DataTable y gestionar las relaciones entre ellos.

Consulta de datos con LINQ

LINQ (Idioma Consulta integrada) es una potente función de C# que permite consultar datos de diversas fuentes de datos, incluidos los objetos DataTable. Para utilizar LINQ con DataTables, es necesario importar el espacio de nombres System.Linq. He aquí un ejemplo de cómo filtrar empleados mayores de 25 años utilizando LINQ:

using System.Linq;

var filteredRows = dt.AsEnumerable().Where(row => row.Field<int>("Age") > 25);

foreach (DataRow row in filteredRows)
{
    Console.WriteLine(row ["Name"]);
}
using System.Linq;

var filteredRows = dt.AsEnumerable().Where(row => row.Field<int>("Age") > 25);

foreach (DataRow row in filteredRows)
{
    Console.WriteLine(row ["Name"]);
}
Imports System.Linq

Private filteredRows = dt.AsEnumerable().Where(Function(row) row.Field(Of Integer)("Age") > 25)

For Each row As DataRow In filteredRows
	Console.WriteLine(row ("Name"))
Next row
VB   C#

DataView: Ordenar y filtrar

DataView es otra clase útil proporcionada por el espacio de nombres System.Data que permite crear una vista ordenada o filtrada de una DataTable. Esto es especialmente útil cuando se necesita mostrar los datos en un control de interfaz de usuario como un DataGridView. También podemos hacer data binding para añadir datos al control DataGridView desde una DataTable.

He aquí un ejemplo de cómo crear un DataView para filtrar y ordenar los empleados en función de su edad:

DataView view = new DataView(dt);

//  Filtrar los empleados mayores de 25 años
view.RowFilter = "Age > 25";

//  Ordenar por edad en orden descendente
view.Sort = "Age DESC";

//  Visualizar los datos filtrados y ordenados
foreach (DataRowView rowView in view)
{
    DataRow row = rowView.Row;
    Console.WriteLine(row ["Name"]);
}
DataView view = new DataView(dt);

//  Filtrar los empleados mayores de 25 años
view.RowFilter = "Age > 25";

//  Ordenar por edad en orden descendente
view.Sort = "Age DESC";

//  Visualizar los datos filtrados y ordenados
foreach (DataRowView rowView in view)
{
    DataRow row = rowView.Row;
    Console.WriteLine(row ["Name"]);
}
Dim view As New DataView(dt)

'  Filtrar los empleados mayores de 25 años
view.RowFilter = "Age > 25"

'  Ordenar por edad en orden descendente
view.Sort = "Age DESC"

'  Visualizar los datos filtrados y ordenados
For Each rowView As DataRowView In view
	Dim row As DataRow = rowView.Row
	Console.WriteLine(row ("Name"))
Next rowView
VB   C#

Exportación de DataTable a PDF con IronPDF

IronPDF es un potente HTML a PDF repleto de funciones de manipulación de PDF fáciles de usar, permite a los desarrolladores crear, leer y editar documentos PDF en aplicaciones .NET.

using IronPdf;

class Program
{
    static void Main(string [] args)
    {
        var renderer = new ChromePdfRenderer();

        //  1. Convertir cadena HTML a PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        //  2. Convertir archivo HTML a PDF
        var htmlFilePath = "path_to_your_html_file.html"; //  Especifique la ruta a su archivo HTML
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        //  3. Convertir URL a PDF
        var url = "http://ironpdf.com"; // Especificar la URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string [] args)
    {
        var renderer = new ChromePdfRenderer();

        //  1. Convertir cadena HTML a PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        //  2. Convertir archivo HTML a PDF
        var htmlFilePath = "path_to_your_html_file.html"; //  Especifique la ruta a su archivo HTML
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        //  3. Convertir URL a PDF
        var url = "http://ironpdf.com"; // Especificar la URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		'  1. Convertir cadena HTML a PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		'  2. Convertir archivo HTML a PDF
		Dim htmlFilePath = "path_to_your_html_file.html" '  Especifique la ruta a su archivo HTML
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		'  3. Convertir URL a PDF
		Dim url = "http://ironpdf.com" ' Especificar la URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

En esta sección, aprenderemos cómo exportar una DataTable a un documento PDF utilizando IronPDF.

En primer lugar, debe instalar el paquete IronPDF NuGet. Abra la consola del gestor de paquetes en Visual Studio y ejecute el siguiente comando:

Install-Package IronPdf

Una vez instalado el paquete, puede empezar importando los espacios de nombres necesarios en su código:

using IronPdf;
using System.IO;
using IronPdf;
using System.IO;
Imports IronPdf
Imports System.IO
VB   C#

A continuación, cree un método auxiliar que convierta DataTable en una tabla HTML, ya que IronPDF utiliza HTML para representar el contenido de los documentos PDF:

public static string ConvertDataTableToHtml(DataTable dt)
{
    StringBuilder htmlBuilder = new StringBuilder();

    htmlBuilder.AppendLine("<table border='1' cellpadding='5' cellspacing='0'>");
    htmlBuilder.AppendLine("<tr>");

    //  Añadir cabeceras de columna
    foreach (DataColumn col in dt.Columns)
    {
        htmlBuilder.AppendFormat("<th>{0}</th>", col.ColumnName);
    }

    htmlBuilder.AppendLine("</tr>");

    //  Añadir filas
    foreach (DataRow row in dt.Rows)
    {
        htmlBuilder.AppendLine("<tr>");

        foreach (DataColumn col in dt.Columns)
        {
            htmlBuilder.AppendFormat("<td>{0}</td>", row [col]);
        }

        htmlBuilder.AppendLine("</tr>");
    }

    htmlBuilder.AppendLine("</table>");

    return htmlBuilder.ToString();
}
public static string ConvertDataTableToHtml(DataTable dt)
{
    StringBuilder htmlBuilder = new StringBuilder();

    htmlBuilder.AppendLine("<table border='1' cellpadding='5' cellspacing='0'>");
    htmlBuilder.AppendLine("<tr>");

    //  Añadir cabeceras de columna
    foreach (DataColumn col in dt.Columns)
    {
        htmlBuilder.AppendFormat("<th>{0}</th>", col.ColumnName);
    }

    htmlBuilder.AppendLine("</tr>");

    //  Añadir filas
    foreach (DataRow row in dt.Rows)
    {
        htmlBuilder.AppendLine("<tr>");

        foreach (DataColumn col in dt.Columns)
        {
            htmlBuilder.AppendFormat("<td>{0}</td>", row [col]);
        }

        htmlBuilder.AppendLine("</tr>");
    }

    htmlBuilder.AppendLine("</table>");

    return htmlBuilder.ToString();
}
Public Shared Function ConvertDataTableToHtml(ByVal dt As DataTable) As String
	Dim htmlBuilder As New StringBuilder()

	htmlBuilder.AppendLine("<table border='1' cellpadding='5' cellspacing='0'>")
	htmlBuilder.AppendLine("<tr>")

	'  Añadir cabeceras de columna
	For Each col As DataColumn In dt.Columns
		htmlBuilder.AppendFormat("<th>{0}</th>", col.ColumnName)
	Next col

	htmlBuilder.AppendLine("</tr>")

	'  Añadir filas
	For Each row As DataRow In dt.Rows
		htmlBuilder.AppendLine("<tr>")

		For Each col As DataColumn In dt.Columns
			htmlBuilder.AppendFormat("<td>{0}</td>", row (col))
		Next col

		htmlBuilder.AppendLine("</tr>")
	Next row

	htmlBuilder.AppendLine("</table>")

	Return htmlBuilder.ToString()
End Function
VB   C#

Ahora, puede utilizar la función HtmlToPdf proporcionada por IronPDF para representar la tabla HTML y guardarla como archivo PDF:

public static void ExportDataTableToPdf(DataTable dt, string outputPath)
{
    //  Convertir DataTable a HTML
    string htmlTable = ConvertDataTableToHtml(dt);

    //  Crear un nuevo renderizador de HTML a PDF
    var renderer = new ChromePdfRenderer();

    //  Establecer estilos globales para la tabla
    renderer.RenderingOptions.CssMediaType = PdfPrintOptions.PdfCssMediaType.Print;
    renderer.RenderingOptions.FirstPageNumber = 1;

    //  Convertir la tabla HTML en un documento PDF
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlTable);

    //  Guardar el archivo PDF
    pdf.SaveAs(outputPath);
}
public static void ExportDataTableToPdf(DataTable dt, string outputPath)
{
    //  Convertir DataTable a HTML
    string htmlTable = ConvertDataTableToHtml(dt);

    //  Crear un nuevo renderizador de HTML a PDF
    var renderer = new ChromePdfRenderer();

    //  Establecer estilos globales para la tabla
    renderer.RenderingOptions.CssMediaType = PdfPrintOptions.PdfCssMediaType.Print;
    renderer.RenderingOptions.FirstPageNumber = 1;

    //  Convertir la tabla HTML en un documento PDF
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlTable);

    //  Guardar el archivo PDF
    pdf.SaveAs(outputPath);
}
Public Shared Sub ExportDataTableToPdf(ByVal dt As DataTable, ByVal outputPath As String)
	'  Convertir DataTable a HTML
	Dim htmlTable As String = ConvertDataTableToHtml(dt)

	'  Crear un nuevo renderizador de HTML a PDF
	Dim renderer = New ChromePdfRenderer()

	'  Establecer estilos globales para la tabla
	renderer.RenderingOptions.CssMediaType = PdfPrintOptions.PdfCssMediaType.Print
	renderer.RenderingOptions.FirstPageNumber = 1

	'  Convertir la tabla HTML en un documento PDF
	Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlTable)

	'  Guardar el archivo PDF
	pdf.SaveAs(outputPath)
End Sub
VB   C#

El método ExportDataTableToPdf crea una DataTable a partir de la tabla HTML y la guarda en el archivo PDF.

Por último, llama al método ExportDataTableToPdf con los parámetros adecuados para exportar tu DataTable:

string pdfOutputPath = "Employees.pdf";
ExportDataTableToPdf(dt, pdfOutputPath);
string pdfOutputPath = "Employees.pdf";
ExportDataTableToPdf(dt, pdfOutputPath);
Dim pdfOutputPath As String = "Employees.pdf"
ExportDataTableToPdf(dt, pdfOutputPath)
VB   C#

Esto creará un fichero PDF llamado "Empleados.pdf" que contendrá el contenido de su TablaDatos en formato tabular.

C# DataTable (Tutorial de cómo funciona para desarrolladores) - Figura 1

Conclusión

En este tutorial, usted ha aprendido los conceptos básicos de DataTables en C# y cómo exportar un DataTable a un documento PDF utilizando la biblioteca IronPDF. Al incorporar la columna de clave principal, las variables del conjunto de datos y DataView para filtrar y ordenar, tendrá un mayor control y flexibilidad sobre sus datos. Ahora debería tener un buen conocimiento de DataTables y de cómo utilizar IronPDF junto con DataTables para crear informes PDF de aspecto profesional en sus aplicaciones C#.

IronPDF ofrece un prueba gratuita para que puedas explorar sus funciones y capacidades antes de comprometerte a comprarlo.

< ANTERIOR
Instalar NuGet Powershell (Tutorial de cómo funciona para desarrolladores)
SIGUIENTE >
Cómo utilizar .NET Fiddle en C#

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123