
C# DataTable (samouczek dla programistów: jak to działa)
Witamy w tym samouczku dotyczącym tabel danych w języku C#. Struktura danych DataTable jest potężną konstrukcją zapewnianą przez .NET framework, która pozwala przechowywać, manipulować i zapytaniać dane w formacie tabelarycznym. W tym samouczku omówimy podstawy DataTables w C#, w tym tworzenie i modyfikowanie DataTables, dodawanie kolumn i wierszy, zapytania do danych oraz użycie DataView do filtrowania i sortowania.
Pod koniec tego samouczka będziesz mieć dobre zrozumienie, jak używać DataTables w swoich aplikacjach C#. Zaczynamy!
Tworzenie tabeli danych
Aby utworzyć DataTable w C#, najpierw musisz zaimportować przestrzeń nazw System.Data. Ta przestrzeń nazw zawiera różne klasy i metody związane z manipulacją danymi, w tym klasę DataTable.
using System.Data;Imports System.DataNastępnie możesz utworzyć instancję klasy DataTable. Najprostszym sposobem na to jest użycie domyślnego konstruktóra, na przykład:
DataTable dt = new DataTable();Dim dt As New DataTable()Możesz również utworzyć DataTable z określoną nazwą, przekazując ciąg znaków do konstruktora:
DataTable dt = new DataTable("Employees");Dim dt As New DataTable("Employees")Metody DataTable
Dodawanie kolumn
Po utworzeniu tabeli DataTable można zacząć dodawać do niej kolumny. Aby dodać kolumnę, najpierw musisz stworzyć instancję klasy DataColumn i ustawić jej właściwości, takie jak ColumnName i DataType.
Oto przykład dodania trzech kolumn do tabeli 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);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)Możesz dodać wiele kolumn jak kolumna Id w tabeli danych.
Dodawanie wierszy danych
Po zdefiniowaniu kolumn możesz zacząć dodawać wiersze do DataTable. Aby dodać wiersz, musisz stworzyć nową instancję klasy DataRow i wypełnić jej pola wymaganymi danymi.
Oto przykład, jak dodać nowy wiersz do DataTable:
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)Możesz również dodać wiele wierszy DataTable naraz, używając tej samej metody w pętli.
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 iW powyższym kodzie dodaliśmy trzy wiersze danych.
Dostęp do danych
Możesz uzyskać dostęp do danych przechowywanych w DataTable, iterując po jego kolekcjach Rows i Columns. Oto przykład, jak wyświetlić zawartość DataTable w konsoli:
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 rowModyfikowanie danych
Możesz modyfikować dane w DataTable, aktualizując wartości w jego obiektach DataRow. Oto przykład aktualizacji wieku konkretnego pracownika:
var primaryKey = 1;
DataRow employeeRow = dt.Rows.Find(primaryKey); // Find the row with the specified primary key
if (employeeRow != null)
{
employeeRow["Age"] = 35;
}Dim primaryKey = 1
Dim employeeRow As DataRow = dt.Rows.Find(primaryKey) ' Find the row with the specified primary key
If employeeRow IsNot Nothing Then
employeeRow("Age") = 35
End IfUsuwanie wierszy
Możesz usunąć wiersz z DataTable, wywołując metodę Delete na obiekcie DataRow:
DataRow employeeRow = dt.Rows.Find(1);
if (employeeRow != null)
{
employeeRow.Delete();
dt.AcceptChanges(); // Commit the deletion
}Dim employeeRow As DataRow = dt.Rows.Find(1)
If employeeRow IsNot Nothing Then
employeeRow.Delete()
dt.AcceptChanges() ' Commit the deletion
End IfPamiętaj, że wywołanie Delete na DataRow tylko oznacza wiersz do usunięcia. Musisz wywołać metodę AcceptChanges na DataTable, aby trwale usunąć usunięte wiersze.
Zarządzanie wieloma tabelami
W niektórych przypadkach może zaistnieć potrzeba pracy z wieloma tabelami danych jednocześnie. Można utworzyć zmienną typu dataset, aby przechowywać kilka obiektów DataTable i zarządzać relacjami między nimi.
Wypytywanie danych za pomocą LINQ
LINQ (Language Integrated Query) to potężna funkcja w C#, która pozwala na zapytań dane z różnych źródeł danych, w tym obiektów DataTable. Aby używać LINQ z DataTables, musisz zaimportować przestrzeń nazw System.Linq. Oto przykład filtrowania pracowników powyżej 25 roku życia przy użyciu LINQ:
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 rowDataView: Sortowanie i filtrowanie
DataView to kolejna użyteczna klasa zapewniana przez przestrzeń nazw System.Data, która pozwala tworzyć posortowany lub przefiltrowany widok DataTable. To jest szczególnie przydatne, gdy musisz wyświetlić dane w kontrolce interfejsu użytkownika, takiej jak DataGridView. Możemy również wykonywać wiązanie danych, aby dodać dane do kontrolki DataGridView z DataTable.
Oto przykład tworzenia widoku DataView w celu filtrowania i sortowania pracowników na podstawie ich wieku:
DataView view = new DataView(dt);
// Filter employees older than 25
view.RowFilter = "Age > 25";
// Sort by age in descending order
view.Sort = "Age DESC";
// Display the filtered and sorted data
foreach (DataRowView rowView in view)
{
DataRow row = rowView.Row;
Console.WriteLine(row["Name"]);
}Dim view As New DataView(dt)
' Filter employees older than 25
view.RowFilter = "Age > 25"
' Sort by age in descending order
view.Sort = "Age DESC"
' Display the filtered and sorted data
For Each rowView As DataRowView In view
Dim row As DataRow = rowView.Row
Console.WriteLine(row("Name"))
Next rowViewEksportowanie tabeli danych do formatu PDF za pomocą IronPDF
IronPDF to potężny konwerter HTML na PDF, wyposażony w przyjazne dla użytkownika funkcje edycji plików PDF, umożliwiające programistom tworzenie, odczytywanie i edytowanie dokumentów PDF w aplikacjach .NET.
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// Convert HTML String to 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");
// Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the 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()
' Convert HTML String to 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")
' Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End ClassW tej sekcji nauczymy się, jak eksportować DataTable do dokumentu PDF za pomocą IronPDF.
Najpierw należy zainstalować pakiet IronPDF NuGet. Otwórz konsolę menedżera pakietów w Visual Studio i uruchom następujące polecenie:
Po zainstalowaniu pakietu można rozpocząć od zaimportowania niezbędnych przestrzeni nazw do kodu:
using IronPdf;
using System.IO;Imports IronPdf
Imports System.IONastępnie utwórz metodę pomocniczą, która konwertuje DataTable na tabelę HTML, ponieważ IronPDF używa HTML do renderowania treści w dokumentach PDF:
public static string ConvertDataTableToHtml(DataTable dt)
{
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.AppendLine("<table border='1' cellpadding='5' cellspacing='0'>");
htmlBuilder.AppendLine("<tr>");
// Add column headers
foreach (DataColumn col in dt.Columns)
{
htmlBuilder.AppendFormat("<th>{0}</th>", col.ColumnName);
}
htmlBuilder.AppendLine("</tr>");
// Add rows
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(dt As DataTable) As String
Dim htmlBuilder As New StringBuilder()
htmlBuilder.AppendLine("<table border='1' cellpadding='5' cellspacing='0'>")
htmlBuilder.AppendLine("<tr>")
' Add column headers
For Each col As DataColumn In dt.Columns
htmlBuilder.AppendFormat("<th>{0}</th>", col.ColumnName)
Next
htmlBuilder.AppendLine("</tr>")
' Add rows
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
htmlBuilder.AppendLine("</tr>")
Next
htmlBuilder.AppendLine("</table>")
Return htmlBuilder.ToString()
End FunctionTeraz możesz użyć HtmlToPdf class zapewnionej przez IronPDF, aby renderować tabelę HTML i zapisać ją jako plik PDF:
public static void ExportDataTableToPdf(DataTable dt, string outputPath)
{
// Convert DataTable to HTML
string htmlTable = ConvertDataTableToHtml(dt);
// Create a new HTML to PDF renderer
var renderer = new ChromePdfRenderer();
// Set global styles for the table
renderer.RenderingOptions.CssMediaType = PdfPrintOptions.PdfCssMediaType.Print;
renderer.RenderingOptions.FirstPageNumber = 1;
// Render the HTML table as a PDF document
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlTable);
// Save the PDF file
pdf.SaveAs(outputPath);
}Public Shared Sub ExportDataTableToPdf(dt As DataTable, outputPath As String)
' Convert DataTable to HTML
Dim htmlTable As String = ConvertDataTableToHtml(dt)
' Create a new HTML to PDF renderer
Dim renderer As New ChromePdfRenderer()
' Set global styles for the table
renderer.RenderingOptions.CssMediaType = PdfPrintOptions.PdfCssMediaType.Print
renderer.RenderingOptions.FirstPageNumber = 1
' Render the HTML table as a PDF document
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlTable)
' Save the PDF file
pdf.SaveAs(outputPath)
End SubMetoda ExportDataTableToPdf tworzy DataTable z tabeli HTML i zapisuje ją do pliku PDF.
Na koniec, wywołaj metodę ExportDataTableToPdf z odpowiednimi parametrami, aby wyeksportować swój DataTable:
string pdfOutputPath = "Employees.pdf";
ExportDataTableToPdf(dt, pdfOutputPath);Dim pdfOutputPath As String = "Employees.pdf"
ExportDataTableToPdf(dt, pdfOutputPath)To stworzy plik PDF o nazwie "Employees.pdf", zawierający zawartość twojego DataTable w formacie tabelarycznym.

Wnioski
W tym samouczku nauczyłeś się podstaw DataTables w C# i jak eksportować DataTable do dokumentu PDF za pomocą biblioteki IronPDF. Dzięki wykorzystaniu kolumny klucza głównego, zmiennych zestawu danych oraz DataView do filtrowania i sortowania zyskasz większą kontrolę i elastyczność w zakresie danych. Teraz powinieneś dobrze rozumieć działanie DataTables oraz sposób wykorzystania IronPDF w połączeniu z DataTables do tworzenia profesjonalnie wyglądających raportów PDF w aplikacjach napisanych w języku C#.
IronPDF oferuje bezpłatną wersję próbną swoich funkcji, co pozwala zapoznać się z możliwościami programu przed podjęciem decyzji o zakupie.

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.
Powiązane artykuły


