Przejdź do treści stopki
POMOC .NET

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;
using System.Data;
Imports System.Data
$vbLabelText   $csharpLabel

Nastę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();
DataTable dt = new DataTable();
Dim dt As New DataTable()
$vbLabelText   $csharpLabel

Możesz również utworzyć DataTable z określoną nazwą, przekazując ciąg znaków do konstruktora:

DataTable dt = new DataTable("Employees");
DataTable dt = new DataTable("Employees");
Dim dt As New DataTable("Employees")
$vbLabelText   $csharpLabel

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);
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)
$vbLabelText   $csharpLabel

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);
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)
$vbLabelText   $csharpLabel

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 (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
$vbLabelText   $csharpLabel

W 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();
}
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
$vbLabelText   $csharpLabel

Modyfikowanie 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;
}
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 If
$vbLabelText   $csharpLabel

Usuwanie 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
}
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 If
$vbLabelText   $csharpLabel

Pamię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"]);
}
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
$vbLabelText   $csharpLabel

DataView: 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"]);
}
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 rowView
$vbLabelText   $csharpLabel

Eksportowanie 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");
    }
}
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 Class
$vbLabelText   $csharpLabel

W 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:

Install-Package IronPdf

Po zainstalowaniu pakietu można rozpocząć od zaimportowania niezbędnych przestrzeni nazw do kodu:

using IronPdf;
using System.IO;
using IronPdf;
using System.IO;
Imports IronPdf
Imports System.IO
$vbLabelText   $csharpLabel

Nastę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 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(ByVal 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 col

	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 col

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

	htmlBuilder.AppendLine("</table>")

	Return htmlBuilder.ToString()
End Function
$vbLabelText   $csharpLabel

Teraz 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 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(ByVal dt As DataTable, ByVal outputPath As String)
	' Convert DataTable to HTML
	Dim htmlTable As String = ConvertDataTableToHtml(dt)

	' Create a new HTML to PDF renderer
	Dim 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
	Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlTable)

	' Save the PDF file
	pdf.SaveAs(outputPath)
End Sub
$vbLabelText   $csharpLabel

Metoda 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);
string pdfOutputPath = "Employees.pdf";
ExportDataTableToPdf(dt, pdfOutputPath);
Dim pdfOutputPath As String = "Employees.pdf"
ExportDataTableToPdf(dt, pdfOutputPath)
$vbLabelText   $csharpLabel

To stworzy plik PDF o nazwie "Employees.pdf", zawierający zawartość twojego DataTable w formacie tabelarycznym.

C# DataTable (Jak to działa dla deweloperów - Samouczek) - Rysunek 1

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.

Często Zadawane Pytania

Czym jest DataTable w C#?

DataTable to wszechstronna struktura danych w .NET Framework, która pozwala programistom na przechowywanie, manipulowanie i wyszukiwanie danych w formacie tabelarycznym, co czyni ją niezbędną do obsługi danych strukturalnych w aplikacjach.

Jak przekonwertować tabelę danych (DataTable) na dokument PDF w języku C#?

Aby przekonwertować tabelę DataTable na dokument PDF w języku C#, należy najpierw przekształcić tabelę DataTable w tabelę HTML. Należy użyć klasy HtmlToPdf biblioteki IronPDF do renderowania kodu HTML jako dokumentu PDF i zapisać wynikowy plik.

Jak utworzyć tabelę danych (DataTable) w języku C#?

Utworzenie tabeli DataTable w języku C# wymaga zaimportowania przestrzeni nazw System.Data oraz utworzenia instancji klasy DataTable za pomocą jej konstruktóra, opcjonalnie podając konkretną nazwę dla tabeli DataTable.

Jakie kroki należy wykonać, aby dodać kolumny do tabeli DataTable?

Aby dodać kolumny do tabeli DataTable, należy utworzyć instancje klasy DataColumn, skonfigurować właściwości, takie jak ColumnName i DataType, a następnie dodać je do kolekcji Columns tabeli DataTable.

Jak mogę wyeksportować dane z tabeli DataTable do pliku PDF w celu sporządzenia raportu?

Można eksportować dane z tabeli DataTable do pliku PDF, konwertując tabelę DataTable do formatu tabeli HTML, a następnie używając IronPDF do renderowania tego kodu HTML do dokumentu PDF, tworząc profesjonalne raporty.

Jak dodać wiersze do tabeli DataTable w języku C#?

Aby dodać wiersze do tabeli DataTable w języku C#, należy utworzyć nową instancję DataRow, wypełnić ją danymi i dodać do kolekcji Rows tabeli DataTable. Proces ten można powtórzyć dla wielu wierszy za pomocą pętli.

Czym jest LINQ i jak można go używać z DataTables?

LINQ (Language Integrated Query) to potężne narzędzie do tworzenia zapytań w języku C#, które umożliwia filtrowanie, sortowanie i manipulowanie danymi z różnych źródeł, w tym z tabel danych (DataTables), w celu usprawnienia operacji na danych.

Jak filtrować i sortować tabelę danych (DataTable) za pomocą widoku danych (DataView)?

DataView zapewnia wygodny sposób tworzenia filtrowanego lub sortowanego widoku tabeli DataTable. Ustawiając właściwości RowFilter i Sort, można kontrolować sposób wyświetlania danych, co jest szczególnie przydatne w komponentach interfejsu użytkownika.

Jak zainstalować bibliotekę niezbędną do eksportowania tabel DataTables do formatu PDF?

Aby zainstalować bibliotekę IronPDF niezbędną do eksportowania tabel danych do formatu PDF, należy użyć konsoli menedżera pakietów w Visual Studio i wykonać polecenie: Install-Package IronPdf.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

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ą...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie