Datatables .NET (jak to działa dla programistów)
Programiści ASP.NET często szukają wydajnych sposobów prezentacji danych tabelarycznych lub tabel HTML z zaawansowanymi funkcjami takimi jak sortowanie, wyszukiwanie i paginacja. DataTables.NET to potężna biblioteka jQuery, JavaScript i wysoce elastyczne narzędzie, które ułatwia tworzenie interaktywnych i bogatych w funkcje tabel w aplikacjach internetowych. W tym artykule omówimy, jak zintegrować pliki dystrybucyjne DataTables.NET, bibliotekę rozszerzającą tabele do przetwarzania po stronie serwera w projekcie ASP.NET, aby ulepszyć prezentację i doświadczenie użytkownika z danymi tabelarycznymi.
Jak korzystać z DataTables w aplikacji internetowej ASP.NET?
- Stwórz aplikację internetową ASP.NET
- Dodaj pakiet stylizacji klienta DataTables
- Zainstaluj pakiety Entity Framework Core, tylko oprogramowanie podstawowe
- Dodaj klasę modelu, kontroler i stronę Razor
- Dodaj kod JavaScript w pliku JS
- Skonfiguruj konfigurację
- Zbuduj i uruchom program
- Eksportuj dane do pliku Excel za pomocą IronXL dla Excel Data Export
Czym jest DataTables.NET?
DataTables.NET to biblioteka JavaScript jQuery, która pozwala na tworzenie i manipulowanie interaktywnymi tabelami w aplikacjach .NET. Opiera się na wtyczce jQuery DataTables, która zapewnia kompleksowe funkcje API, takie jak paginacja, sortowanie, filtrowanie i przewijanie dla dynamicznych, jak i statycznych tabel HTML. To biblioteka rozszerzająca tabele, która może współpracować z różnymi źródłami danych, takimi jak bazy danych SQL, AJAX czy obiekty w pamięci.
Przetwarzanie po stronie serwera
Rozważmy scenariusz, w którym posiadasz punkt końcowy API dostarczający ogromny zestaw danych produktów. Standardowe podejście polega na tym, że jQuery DataTables wykonuje wywołanie AJAX do tego API, uzyskując listę produktów w formacie JSON i renderując tabelę HTML. To jest znane jako przetwarzanie po stronie klienta, które jest wydajne dla mniejszych zestawów danych, zazwyczaj od 100 do 1000 rekordów. Ale co się dzieje, gdy zestaw danych rozszerza się do 10 000 rekordów lub więcej?
W przypadku dużej liczby rekordów staje się to niepraktyczne, by przesyłać cały zestaw danych do przeglądarki jednocześnie. Przesłanie 10 000 rekordów na raz jest marnotrawstwem zarówno pod względem przepustowości jak i obciąża zasoby przeglądarki. W takich przypadkach alternatywne podejście, przetwarzanie po stronie serwera, staje się istotne dla optymalizacji wydajności.
W przetwarzaniu po stronie serwera, zamiast przesyłać cały zestaw danych, API przesyła dane w kontrolowanych fragmentach, zazwyczaj paginowane z około 50 rekordami na stronę. Dzięki temu czas ładowania jest znacząco poprawiony, ponieważ jQuery DataTables teraz ładuje umiarowaną liczbę rekordów (~50) zamiast całego zestawu danych jednocześnie. Takie podejście zmniejsza użycie CPU i przepustowość, tworząc bardziej efektywną interakcję między API a DataTable.
W tym artykule zbadamy implementację przetwarzania po stronie serwera w aplikacji ASP.NET Razor Page, demonstrując jak efektywnie obsługiwać i wyświetlać obszerne zestawy danych, jednocześnie poprawiając ogólną wydajność Twojej aplikacji internetowej.
Początek pracy z DataTables.NET w ASP.NET 8
Aby rozpocząć, musimy dodać DataTables.NET Client Side Library do naszego projektu. Ten artykuł będzie wykorzystywał projekt ASP.NET Core Web App (Razor Pages) z .NET 8. Możesz używać dowolnego Projektu Web App zgodnie z wymaganiami.
Aby dodać bibliotekę po stronie klienta, kliknij prawym przyciskiem na Solution>Dodaj>Biblioteka klienta i wyszukaj tabele danych, jak pokazano poniżej.

Teraz, musimy dodać klasę modelu, DB Context, kontroler, tabelę HTML i wywołanie AJAX.
Ale przedtem musimy zainstalować pakiety NuGet EntityFramework, aby połączyć naszą aplikację z bazą danych. Ten artykuł wykorzysta podejście Code First, możesz użyć bazy danych first zgodnie z preferencjami.
Zainstaluj następujące lokalnie hostowane pakiety:
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Tools
Zainstaluj powyższy pakiet za pomocą komendy install-package z konsoli NuGet Package Manager, lub zainstaluj go z rozwiązania NuGet Package Manager wyszukując go.
Dodaj klasę modelu
W tym przykładzie używam klasy modelu produktu, możesz ją użyć zgodnie z wymaganiami.
public class Product
{
public int Id { get; set; }
public string ProductName { get; set; } = string.Empty;
public string ProductPrice { get; set; } = string.Empty;
public string ProductWeight { get; set; } = string.Empty;
public string ProductDescription { get; set; } = string.Empty;
public DateTime ProductManufacturingDate { get; set; }
public DateTime ProductExpiryDate { get; set; }
}
public class Product
{
public int Id { get; set; }
public string ProductName { get; set; } = string.Empty;
public string ProductPrice { get; set; } = string.Empty;
public string ProductWeight { get; set; } = string.Empty;
public string ProductDescription { get; set; } = string.Empty;
public DateTime ProductManufacturingDate { get; set; }
public DateTime ProductExpiryDate { get; set; }
}
Public Class Product
Public Property Id() As Integer
Public Property ProductName() As String = String.Empty
Public Property ProductPrice() As String = String.Empty
Public Property ProductWeight() As String = String.Empty
Public Property ProductDescription() As String = String.Empty
Public Property ProductManufacturingDate() As DateTime
Public Property ProductExpiryDate() As DateTime
End Class
Dodaj klasę ApplicationDBContext
public class ApplicationDBContext : DbContext
{
public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options)
{
}
public DbSet<Product> Products { get; set; }
}
public class ApplicationDBContext : DbContext
{
public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options)
{
}
public DbSet<Product> Products { get; set; }
}
Public Class ApplicationDBContext
Inherits DbContext
Public Sub New(ByVal options As DbContextOptions(Of ApplicationDBContext))
MyBase.New(options)
End Sub
Public Property Products() As DbSet(Of Product)
End Class
Dodaj zaawansowane kontrolki interakcji
Dodamy ProductDatatables.js wewnątrz folderu wwwroot/js dla dodania zaawansowanych kontrolek takich jak paginacja, wyszukiwanie itp.
// Initialize the DataTables plugin for the HTML element with 'productDatatable' ID
$(document).ready(function () {
$("#productDatatable").DataTable({
"processing": true, // Enable processing indicator
"serverSide": true, // Enable server-side processing
"ajax": {
"url": "/api/Product", // API endpoint for fetching product data
"type": "POST",
"datatype": "json"
},
"columnDefs": [{
// Define properties for columns
"targets": [0],
"visible": false, // Hide the 'Id' column
"searchable": false // Disable searching for the 'Id' column
}],
"columns": [
{ "data": "id", "name": "Id", "autoWidth": true },
{ "data": "productName", "name": "ProductName", "autoWidth": true },
{ "data": "productPrice", "name": "ProductPrice", "autoWidth": true },
{ "data": "productWeight", "name": "ProductWeight", "autoWidth": true },
{ "data": "productDescription", "name": "ProductDescription", "autoWidth": true },
{ "data": "productManufacturingDate", "name": "ProductManufacturingDate", "autoWidth": true },
{ "data": "productExpiryDate", "name": "ProductExpiryDate", "autoWidth": true },
{
// Add a 'Delete' button with an onclick event for deleting the product
"render": function (data, type, row) {
return "<a href='#' class='btn btn-danger' onclick=DeleteProduct('" + row.id + "');>Delete</a>";
}
}
]
});
});
// Initialize the DataTables plugin for the HTML element with 'productDatatable' ID
$(document).ready(function () {
$("#productDatatable").DataTable({
"processing": true, // Enable processing indicator
"serverSide": true, // Enable server-side processing
"ajax": {
"url": "/api/Product", // API endpoint for fetching product data
"type": "POST",
"datatype": "json"
},
"columnDefs": [{
// Define properties for columns
"targets": [0],
"visible": false, // Hide the 'Id' column
"searchable": false // Disable searching for the 'Id' column
}],
"columns": [
{ "data": "id", "name": "Id", "autoWidth": true },
{ "data": "productName", "name": "ProductName", "autoWidth": true },
{ "data": "productPrice", "name": "ProductPrice", "autoWidth": true },
{ "data": "productWeight", "name": "ProductWeight", "autoWidth": true },
{ "data": "productDescription", "name": "ProductDescription", "autoWidth": true },
{ "data": "productManufacturingDate", "name": "ProductManufacturingDate", "autoWidth": true },
{ "data": "productExpiryDate", "name": "ProductExpiryDate", "autoWidth": true },
{
// Add a 'Delete' button with an onclick event for deleting the product
"render": function (data, type, row) {
return "<a href='#' class='btn btn-danger' onclick=DeleteProduct('" + row.id + "');>Delete</a>";
}
}
]
});
});
Teraz, musimy dodać tabelę HTML.
Dodaj tabelę HTML
Napisz poniższy kod w pliku index.cshtml, aby dodać statyczną stronę HTML.
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<link href="~/lib/datatables/css/dataTables.bootstrap4.min.css" rel="stylesheet" />
<div class="container">
<br />
<div style="width:90%; margin:0 auto;">
<table id="productDatatable" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0">
<thead>
<tr>
<th>Id</th>
<th>Product Name</th>
<th>Product Price</th>
<th>Product Weight</th>
<th>Product Description</th>
<th>Product Manufacturing Date</th>
<th>Product Expiry Date</th>
<th>Actions</th>
</tr>
</thead>
</table>
</div>
</div>
@section Scripts {
<script src="~/lib/datatables/js/jquery.dataTables.min.js"></script>
<script src="~/lib/datatables/js/dataTables.bootstrap4.min.js"></script>
<script src="~/js/ProductDatatable.js"></script>
}
Musimy dodać kontroler.
Dodaj kontroler produktu
Dodaj kontroler produktów dla tworzenia punktu końcowego i bezpośrednich żądań pobierania.
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
private readonly ApplicationDBContext context;
public ProductController(ApplicationDBContext context)
{
this.context = context;
}
[HttpPost]
public IActionResult GetProducts()
{
try
{
var draw = Request.Form["draw"].FirstOrDefault();
var start = Request.Form["start"].FirstOrDefault();
var length = Request.Form["length"].FirstOrDefault();
var searchValue = Request.Form["search[value]"].FirstOrDefault();
int pageSize = length != null ? Convert.ToInt32(length) : 0;
int skip = start != null ? Convert.ToInt32(start) : 0;
int recordsTotal = 0;
var productData = context.Products.ToLis();
// Filtering data based on provided search value
if (!string.IsNullOrEmpty(searchValue))
{
productData = productData.Where(m => m.ProductName.Contains(searchValue)
|| m.ProductDescription.Contains(searchValue)
|| m.Id.ToString().Contains(searchValue)).ToList();
}
recordsTotal = productData.Count();
var data = productData.Skip(skip).Take(pageSize).ToList();
var jsonData = new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data };
return Ok(jsonData);
}
catch (Exception)
{
throw;
}
}
}
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
private readonly ApplicationDBContext context;
public ProductController(ApplicationDBContext context)
{
this.context = context;
}
[HttpPost]
public IActionResult GetProducts()
{
try
{
var draw = Request.Form["draw"].FirstOrDefault();
var start = Request.Form["start"].FirstOrDefault();
var length = Request.Form["length"].FirstOrDefault();
var searchValue = Request.Form["search[value]"].FirstOrDefault();
int pageSize = length != null ? Convert.ToInt32(length) : 0;
int skip = start != null ? Convert.ToInt32(start) : 0;
int recordsTotal = 0;
var productData = context.Products.ToLis();
// Filtering data based on provided search value
if (!string.IsNullOrEmpty(searchValue))
{
productData = productData.Where(m => m.ProductName.Contains(searchValue)
|| m.ProductDescription.Contains(searchValue)
|| m.Id.ToString().Contains(searchValue)).ToList();
}
recordsTotal = productData.Count();
var data = productData.Skip(skip).Take(pageSize).ToList();
var jsonData = new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data };
return Ok(jsonData);
}
catch (Exception)
{
throw;
}
}
}
<Route("api/[controller]")>
<ApiController>
Public Class ProductController
Inherits ControllerBase
Private ReadOnly context As ApplicationDBContext
Public Sub New(ByVal context As ApplicationDBContext)
Me.context = context
End Sub
<HttpPost>
Public Function GetProducts() As IActionResult
Try
Dim draw = Request.Form("draw").FirstOrDefault()
Dim start = Request.Form("start").FirstOrDefault()
Dim length = Request.Form("length").FirstOrDefault()
Dim searchValue = Request.Form("search[value]").FirstOrDefault()
Dim pageSize As Integer = If(length IsNot Nothing, Convert.ToInt32(length), 0)
Dim skip As Integer = If(start IsNot Nothing, Convert.ToInt32(start), 0)
Dim recordsTotal As Integer = 0
Dim productData = context.Products.ToLis()
' Filtering data based on provided search value
If Not String.IsNullOrEmpty(searchValue) Then
productData = productData.Where(Function(m) m.ProductName.Contains(searchValue) OrElse m.ProductDescription.Contains(searchValue) OrElse m.Id.ToString().Contains(searchValue)).ToList()
End If
recordsTotal = productData.Count()
Dim data = productData.Skip(skip).Take(pageSize).ToList()
Dim jsonData = New With {
Key .draw = draw,
Key .recordsFiltered = recordsTotal,
Key .recordsTotal = recordsTotal,
Key .data = data
}
Return Ok(jsonData)
Catch e1 As Exception
Throw
End Try
End Function
End Class
Tutaj wdrożyliśmy paginację i wyszukiwanie po stronie serwera.
Teraz, musimy skonfigurować naszą bazę danych i dodać ustawienia do klasy Program.cs. Jeśli używasz .NET 5 lub starszej wersji, możesz potrzebować zrobić to w klasie Startup.cs.
Przede wszystkim, dodaj następujący Connection String w pliku appsettings.json.
"ConnectionStrings": {
"ProductDB": "Server=localserver\\SQLEXPRESS;Database=ProductDB;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;"
}
Teraz dodaj poniższy kod do klasy Program.cs.
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ApplicationDBContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductDB"));
});
builder.Services.AddControllers();
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.MapRazorPages();
app.Run();
}
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ApplicationDBContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductDB"));
});
builder.Services.AddControllers();
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.MapRazorPages();
app.Run();
}
Public Shared Sub Main(ByVal args() As String)
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddDbContext(Of ApplicationDBContext)(Sub(options)
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductDB"))
End Sub)
builder.Services.AddControllers()
' Add services to the container.
builder.Services.AddRazorPages()
Dim app = builder.Build()
' Configure the HTTP request pipeline.
If Not app.Environment.IsDevelopment() Then
app.UseExceptionHandler("/Error")
' The default HSTS value is 30 days.
app.UseHsts()
End If
app.UseHttpsRedirection()
app.UseStaticFiles()
app.UseRouting()
app.UseAuthorization()
app.MapControllers()
app.MapRazorPages()
app.Run()
End Sub
Musimy uruchomić migrację, ponieważ używamy podejścia code-first.
Uruchom następujące polecenie w konsoli menedżera pakietów.
Add-Migration init
Add-Migration init
Powyższa komenda stworzy migrację. Teraz musimy zaimplementować te migracje do naszej bazy danych. Uruchom następujące polecenie w konsoli menedżera pakietów.
Update-Database
Update-Database
Powyższa komenda stworzy tabele w naszej bazie danych. Dodaj przykładowe dane w tabeli produktów; możesz wygenerować losowe dane z Mockaroo.
Teraz skompiluj i uruchom tę aplikację.
Wynik
Widzimy, że mamy bardzo interfejs użytkownika z zaawansowaną kontrolką interakcji.

Teraz implementacja paginacji po stronie serwera jak pokazano poniżej.

Interfejs użytkownika
Dane są następnie renderowane po stronie klienta z bogatą kontrolką interfejsu użytkownika.

Możesz odkrywać więcej z dokumentacji DataTables.NET klikając odkryj dokumentację DataTables.NET.
Wprowadzenie do IronXL
IronXL - Biblioteka Excel dla .NET to biblioteka umożliwiająca pracę z plikami Excel w aplikacjach .NET. Może tworzyć arkusze Excel, czytać pliki CSV, edytować pliki Excel, oraz eksportować do Excel w różnych formatach, takich jak XLS, XLSX, CSV i TSV. Nie wymaga zainstalowanego Microsoft Office lub Excel Interop. Obsługuje .NET 8, 7, 6, 5, Core, Framework i Azure.
Często mamy potrzebę eksportowania danych do plików Excel lub CSV. W tym przypadku najlepszym wyborem jest IronXL. Teraz napiszemy kod do eksportu naszych danych do pliku Excel.
Zainstaluj IronXL
Zainstaluj bibliotekę IronXL w naszym projekcie wprowadzając poniższą komendę w konsoli Package Manager.
Install-Package IronPdf
Spowoduje to zainstalowanie IronXL i wymaganych zależności w naszym projekcie.
Eksportuj dane do Excela
Napiszmy kod do konwersji naszej listy produktów do pliku Excel.
public void ExportToExcel(List<Product> productList)
{
WorkBook wb = WorkBook.Create(ExcelFileFormat.XLSX); // Create a new workbook instance
WorkSheet ws = wb.DefaultWorkSheet; // Access the default worksheet
int rowCount = 1;
// Iterate over the product list and fill the worksheet
foreach (Product product in productList)
{
ws["A" + rowCount].Value = product.Id.ToString();
ws["B" + rowCount].Value = product.ProductName;
ws["C" + rowCount].Value = product.ProductDescription;
ws["D" + rowCount].Value = product.ProductPrice;
ws["E" + rowCount].Value = product.ProductWeight;
ws["F" + rowCount].Value = product.ProductManufacturingDate;
ws["G" + rowCount].Value = product.ProductExpiryDate;
rowCount++;
}
wb.SaveAs("product.xlsx"); // Save the workbook as an Excel file
}
public void ExportToExcel(List<Product> productList)
{
WorkBook wb = WorkBook.Create(ExcelFileFormat.XLSX); // Create a new workbook instance
WorkSheet ws = wb.DefaultWorkSheet; // Access the default worksheet
int rowCount = 1;
// Iterate over the product list and fill the worksheet
foreach (Product product in productList)
{
ws["A" + rowCount].Value = product.Id.ToString();
ws["B" + rowCount].Value = product.ProductName;
ws["C" + rowCount].Value = product.ProductDescription;
ws["D" + rowCount].Value = product.ProductPrice;
ws["E" + rowCount].Value = product.ProductWeight;
ws["F" + rowCount].Value = product.ProductManufacturingDate;
ws["G" + rowCount].Value = product.ProductExpiryDate;
rowCount++;
}
wb.SaveAs("product.xlsx"); // Save the workbook as an Excel file
}
Public Sub ExportToExcel(ByVal productList As List(Of Product))
Dim wb As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) ' Create a new workbook instance
Dim ws As WorkSheet = wb.DefaultWorkSheet ' Access the default worksheet
Dim rowCount As Integer = 1
' Iterate over the product list and fill the worksheet
For Each product As Product In productList
ws("A" & rowCount).Value = product.Id.ToString()
ws("B" & rowCount).Value = product.ProductName
ws("C" & rowCount).Value = product.ProductDescription
ws("D" & rowCount).Value = product.ProductPrice
ws("E" & rowCount).Value = product.ProductWeight
ws("F" & rowCount).Value = product.ProductManufacturingDate
ws("G" & rowCount).Value = product.ProductExpiryDate
rowCount += 1
Next product
wb.SaveAs("product.xlsx") ' Save the workbook as an Excel file
End Sub
Utworzyliśmy plik Excel z listy w bardzo prosty i łatwy sposób.

IronXL dostarcza wszechstronne samouczki o tworzeniu plików XLSX, przykłady kodu do czytania Excel, oraz dokumentację API aby używać jego kompleksowego API w najlepszy możliwy sposób.
W optymalizacji wydajności ASP.NET, opieramy się wyłącznie na Oprogramowaniu Podstawowym, zapewniając lekkie i wydajne środowisko deweloperskie. Wykorzystanie DataTables.NET jako lokalnie hostowanych pakietów dodatkowo zwiększa responsywność, minimalizując zewnętrzne zależności dla usprawnionego przetwarzania danych i eksportu do Excel. Dodatkowo, efektywna kontrybucja kodu staje się bezproblemowa w tym zoptymalizowanym i samowystarczalnym ekosystemie.
IronPDF to rozwiązanie zaprojektowane do konwersji stron internetowych, URLi i HTML na dokumenty PDF. Generowane pliki PDF zachowują oryginalne formatowanie i elementy stylistyczne źródłowych stron internetowych. To narzędzie jest szczególnie skuteczne w tworzeniu PDF przedstawiających zawartość opartą na web, taką jak raporty i faktury.
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. 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");
// 2. 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");
// 3. 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();
// 1. 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");
// 2. 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");
// 3. 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()
' 1. 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")
' 2. 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")
' 3. 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
Wnioski
Podsumowując, wykorzystanie DataTables.NET do przetwarzania po stronie serwera w projektach repo dystrybucji ASP.NET okazuje się dobrą strategią do efektywnego obsługi masywnych zestawów danych. To podejście zapewnia zoptymalizowaną wydajność poprzez przesyłanie danych w kontrolowanych fragmentach, minimalizowanie zużycia przepustowości i poprawę wrażeń użytkownika. Integracja IronXL dodatkowo rozszerza możliwości aplikacji, umożliwiając bezproblemowy eksport danych tabelarycznych do Excel dla kompleksowej analizy danych i raportowania.
Przyjmując te technologie, deweloperzy mogą tworzyć aplikacje internetowe, które osiągają równowagę między bogatą interaktywnością a wydajnością zasobów, zapewniając użytkownikom spójne i responsywne wrażenia, szczególnie w scenariuszach, gdzie zaangażowane są duże zbiory danych. IronXL oferuje różne opcje licencjonowania dla IronXL, w zależności od liczby deweloperów, projektów i potrzeb redystrybucji. Licencje są bezterminowe i obejmują bezpłatną pomoc techniczną oraz aktualizacje.
Często Zadawane Pytania
Jak zintegrować DataTables.NET z projektem ASP.NET?
Aby zintegrować DataTables.NET z projektem ASP.NET, należy utworzyć aplikację internetową ASP.NET, dodać pakiety stylów DataTables po stronie klienta, zainstalować pakiety Entity Framework Core, dodać klasy modeli, kontrolery i strony Razor, skonfigurować JavaScript do przetwarzania po stronie serwera, a następnie skompilować i uruchomić projekt.
Czym jest przetwarzanie po stronie serwera w DataTables.NET?
Przetwarzanie po stronie serwera w DataTables.NET polega na przesyłaniu danych w łatwych do zarządzania fragmentach z serwera do klienta, zamiast ładowania całego zestawu danych naraz. Poprawia to wydajność poprzez skrócenie czasu ładowania oraz zminimalizowanie wykorzystania procesora i przepustowości, zwłaszcza w przypadku dużych zestawów danych.
Dlaczego przetwarzanie po stronie serwera jest ważne w DataTables.NET?
Przetwarzanie po stronie serwera ma kluczowe znaczenie dla optymalizacji wydajności podczas obsługi dużych zbiorów danych. Pozwala serwerowi wysyłać do klienta tylko niezbędne dane, zmniejszając obciążenie przeglądarki i poprawiając ogólną wydajność.
Jak mogę wyeksportować dane tabelaryczne do programu Excel w aplikacji ASP.NET?
Możesz użyć biblioteki IronXL do eksportowania danych tabelarycznych do programu Excel w aplikacji ASP.NET. IronXL pozwala tworzyć i edytować pliki Excel bezpośrednio z list danych bez konieczności korzystania z pakietu Microsoft Office lub interfejsu Excel Interop.
Jak skonfigurować bibliotekę po stronie klienta w ASP.NET dla DataTables?
Aby skonfigurować bibliotekę po stronie klienta w ASP.NET, kliknij prawym przyciskiem myszy na swoim rozwiązaniu w Visual Studio, wybierz „Dodaj”, a następnie wybierz „Biblioteka po stronie klienta”. Możesz wyszukać i dodać wybraną bibliotekę, taką jak DataTables, która zwiększy funkcjonalność Twojego projektu.
Jakie kroki należy wykonać, aby skonfigurować DataTables.NET do przetwarzania po stronie serwera?
Aby skonfigurować DataTables.NET do przetwarzania po stronie serwera, upewnij się, że masz skonfigurowaną klasę modelu, kontekst bazy danych, kontroler i tabelę HTML. Musisz również wykonać wywołanie AJAX i skonfigurować logikę przetwarzania po stronie serwera w plikach JavaScript, aby obsługiwać pobieranie i manipulowanie danymi.
Jak działa filtrowanie i paginacja w DataTables.NET?
Filtrowanie i stronicowanie w DataTables.NET sa zarzadzane przez przetwarzanie po stronie serwera. Serwer filtruje dane na podstawie kryteriow wyszukiwania i zarzadza stronicowaniem, wysylajac kawalki danych do klienta, zapewniajac skuteczne przetwarzanie danych.




