<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: combit Software</title>
    <description>The latest articles on DEV Community by combit Software (combit).</description>
    <link>https://dev.to/combit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4285%2F8eba2446-9407-49ed-b657-e23add082105.png</url>
      <title>DEV Community: combit Software</title>
      <link>https://dev.to/combit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/combit"/>
    <language>en</language>
    <item>
      <title>A European Alternative to Crystal Reports</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Tue, 08 Sep 2026 13:19:06 +0000</pubDate>
      <link>https://dev.to/combit/a-european-alternative-to-crystal-reports-2b80</link>
      <guid>https://dev.to/combit/a-european-alternative-to-crystal-reports-2b80</guid>
      <description>&lt;p&gt;We're seeing more and more satisfied customers switching to us from SAP Crystal Reports (a reporting solution that is no longer being developed).&lt;/p&gt;

&lt;p&gt;For many software teams, Crystal Reports is not just a reporting tool. It is years of templates, invoices, labels, PDFs, customer-specific layouts, and “please don’t touch this” legacy code.&lt;/p&gt;

&lt;p&gt;That is why replacing it is hard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Teams Start Looking Beyond Crystal Reports
&lt;/h2&gt;

&lt;p&gt;The usual pain points are familiar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fragile deployment&lt;/li&gt;
&lt;li&gt;runtime dependencies that are easy to break&lt;/li&gt;
&lt;li&gt;security issues/no more security patches&lt;/li&gt;
&lt;li&gt;no Linux/iOS support&lt;/li&gt;
&lt;li&gt;designers detached from the application&lt;/li&gt;
&lt;li&gt;limited flexibility when customers want to adjust reports themselves&lt;/li&gt;
&lt;li&gt;and migration projects that look risky because no one wants to rebuild hundreds of reports by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also the bigger question: &lt;strong&gt;do you really want your reporting stack tied to an old workflow while the rest of your application moves forward?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Reporting Component Built for Developers → List &amp;amp; Label by combit
&lt;/h2&gt;

&lt;p&gt;That is where we can offer a solution—List &amp;amp; Label.&lt;/p&gt;

&lt;p&gt;List &amp;amp; Label is a cross-platform reporting component for developers who want reporting to be part of their own application, not a separate world bolted onto it.&lt;/p&gt;

&lt;p&gt;It integrates into .NET, with C# in Visual Studio (and other DLL/API-compatible environments), so teams keep control over the user experience and architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration Without Starting From Zero
&lt;/h2&gt;

&lt;p&gt;A practical reason to look at List &amp;amp; Label as a Crystal Reports alternative is migration.&lt;/p&gt;

&lt;p&gt;List &amp;amp; Label includes a customizable Crystal Reports converter in the Professional and Enterprise editions. It can transfer Crystal Reports content directly into List &amp;amp; Label, including standard areas and groupings, and comes with C# source code so teams can adapt the converter to their own setup.&lt;/p&gt;

&lt;p&gt;That matters because real-world reporting is never clean. Reports contain conventions, exceptions, formatting rules, and business logic that has grown over time.&lt;/p&gt;

&lt;p&gt;An adaptable migration path is much more useful than a “one-size-fits-all” promise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easier Deployment &amp;amp; Modern Reporting Features
&lt;/h2&gt;

&lt;p&gt;List &amp;amp; Label also reduces development friction. It supports xcopy deployment, so no special database drivers or complex setup routines are needed. In many cases, the required files can simply be copied with the application. That makes deployment easier to understand, automate, and support.&lt;/p&gt;

&lt;p&gt;The product also covers what teams expect from a mature reporting solution: rich designer objects, many export formats, more than 30 data providers, custom data provider support, web controls, different viewer controls, and a Report Server option for web, cloud, and REST API scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Designer Inside Your Application
&lt;/h2&gt;

&lt;p&gt;For end users, the integrated report designer is a major difference. Instead of opening a separate tool or process, the designer can become a first-class part of your application. Users work with reports where they already work, while you decide which functionality they can access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the European Alternative Matters
&lt;/h2&gt;

&lt;p&gt;And for European software companies, there is another reason to care: List &amp;amp; Label's manufacturer combit is based in Germany. For teams that prefer a European vendor and a reporting partner closer to their regulatory and procurement context, List &amp;amp; Label is a serious alternative to consider. Read more about this here:&lt;br&gt;
&lt;a href="https://www.combit.com/european-reporting-alternative/" rel="noopener noreferrer"&gt;List &amp;amp; Label—the European reporting alternative&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving Reporting Forward
&lt;/h2&gt;

&lt;p&gt;Switching reporting tools is not something anyone does for fun.&lt;/p&gt;

&lt;p&gt;But if Crystal Reports has become a source of deployment pain, technical debt, or product friction, List &amp;amp; Label gives developers a migration path, an embeddable designer, flexible deployment, web and cloud options, and a European vendor behind it.&lt;/p&gt;

&lt;p&gt;You do not have to rebuild your reporting strategy from scratch. You can move it forward.&lt;/p&gt;

&lt;p&gt;Visit this site for further informations or to get the free List &amp;amp; Label trial: &lt;a href="https://www.combit.com/alternative-to-crystal-reports/" rel="noopener noreferrer"&gt;Alternative to Crystal Reports&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>softwaredevelopment</category>
      <category>dotnet</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to Let Users Customize Reports Without Shipping New Code</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Thu, 03 Sep 2026 14:39:35 +0000</pubDate>
      <link>https://dev.to/combit/how-to-let-users-customize-reports-without-shipping-new-code-3880</link>
      <guid>https://dev.to/combit/how-to-let-users-customize-reports-without-shipping-new-code-3880</guid>
      <description>&lt;p&gt;Reports often start simple: export a table, generate an invoice, create a PDF.&lt;/p&gt;

&lt;p&gt;Then real users arrive.&lt;/p&gt;

&lt;p&gt;Finance wants a different invoice layout. Operations needs grouped tables. A customer asks for custom fields. Someone wants Excel instead of PDF. Suddenly, every report change becomes a development task.&lt;/p&gt;

&lt;p&gt;That does not scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A better approach is to separate report data from report layout.&lt;/strong&gt; Your application still controls the data, permissions, and business rules. The visual structure can live in configurable templates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why hard-coded reports become painful
&lt;/h2&gt;

&lt;p&gt;Hard-coded reports are fine for one fixed output. They become expensive when users need variations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different layouts per customer&lt;/li&gt;
&lt;li&gt;localized labels&lt;/li&gt;
&lt;li&gt;custom columns&lt;/li&gt;
&lt;li&gt;PDF and Excel exports&lt;/li&gt;
&lt;li&gt;frequent layout changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each small change means code changes, testing, deployment, and another ticket.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better pattern: controlled customization
&lt;/h2&gt;

&lt;p&gt;Instead of rebuilding reports every time, expose the data users are allowed to use and let trusted users adjust the layout.&lt;/p&gt;

&lt;p&gt;A typical workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your application provides structured data.&lt;/li&gt;
&lt;li&gt;A report template defines the layout.&lt;/li&gt;
&lt;li&gt;A designer lets users edit fields, tables, labels, and charts.&lt;/li&gt;
&lt;li&gt;The application previews, prints, or exports the result.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This keeps business logic in code while moving presentation changes into templates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where List &amp;amp; Label fits
&lt;/h2&gt;

&lt;p&gt;List &amp;amp; Label is a &lt;a href="https://www.report-generator.com/" rel="noopener noreferrer"&gt;report generator for developers&lt;/a&gt; who want to add reporting, printing, preview, export, and report design features to their own applications.&lt;/p&gt;

&lt;p&gt;For .NET teams, the Report Designer can be integrated into the application itself. Users can adjust templates without leaving the product, while developers still control which data is available and how it is secured.&lt;/p&gt;

&lt;p&gt;That makes it useful for invoices, forms, printable lists, dashboards, PDF exports, Excel exports, and user-editable reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  When it makes sense
&lt;/h2&gt;

&lt;p&gt;Embedding a report designer is probably overkill for one static PDF.&lt;/p&gt;

&lt;p&gt;But if users regularly ask for layout changes, custom fields, export options, or customer-specific reports, a designer-based approach can save engineering time.&lt;/p&gt;

&lt;p&gt;The idea is simple: do not ship new code for every report layout change. Give users safe, controlled flexibility instead.&lt;/p&gt;

&lt;p&gt;For .NET applications that need embedded report design, List &amp;amp; Label is one option worth evaluating.&lt;/p&gt;

&lt;p&gt;Have a look at the &lt;a href="https://www.combit.com/list-label-online-demo/" rel="noopener noreferrer"&gt;free Online Demo&lt;/a&gt; or get the &lt;a href="https://www.combit.com/trial/" rel="noopener noreferrer"&gt;free trial&lt;/a&gt; to get started.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>softwaredevelopment</category>
      <category>webcomponents</category>
    </item>
    <item>
      <title>Integrated and automated MySQL database reporting for your application</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Tue, 28 Jul 2026 14:07:47 +0000</pubDate>
      <link>https://dev.to/combit/integrated-and-automated-mysql-database-reporting-for-your-application-1g17</link>
      <guid>https://dev.to/combit/integrated-and-automated-mysql-database-reporting-for-your-application-1g17</guid>
      <description>&lt;p&gt;Reporting from MySQL data often starts simple: run a query, export the table and send the result as file. But as soon as users need filtered views, charts, drilldowns, scheduled exports, or editable report layouts, hardcoded reporting logic becomes a maintenance problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embedded MySQL database reporting
&lt;/h2&gt;

&lt;p&gt;List &amp;amp; Label approaches this as an embedded reporting layer for developers. Instead of building report design, preview, export, and distribution workflows from scratch, you can connect your application directly to a MySQL database and use List &amp;amp; Label’s integrated Designer to create reports from tables, views, stored procedures, or custom SQL commands.&lt;/p&gt;

&lt;p&gt;The integration works through the &lt;code&gt;MySqlConnectionDataProvider&lt;/code&gt;, which binds MySQL data to a &lt;code&gt;ListLabel&lt;/code&gt; object. From there, the Designer can expose the connected database structure and let developers - or even end users, depending on the application setup - build report templates visually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interactive reports
&lt;/h2&gt;

&lt;p&gt;Once connected, reports can go beyond static tables. List &amp;amp; Label supports interactive elements such as report parameters, drilldowns, expandable regions, sortable columns and objects like charts, crosstabs, barcodes, PDFs, subreports, master-detail layouts and much more. That makes it suitable for dashboards, operational reports, invoices, analytics views, and customer-facing exports.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbcm0i1hh4j2shuuv0yw0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbcm0i1hh4j2shuuv0yw0.gif" alt="interactive reporting elements" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Automate your MySQL database reports
&lt;/h2&gt;

&lt;p&gt;Automation is another key part of the workflow. Reports can be exported to formats such as PDF, Excel, Word, PowerPoint, HTML, JSON, XML, CSV, and a lot of image formats. They can also be distributed by email through SMTP, Microsoft Graph API, Simple MAPI, or XMAPI  and with ZIP packaging available when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits for developers
&lt;/h2&gt;

&lt;p&gt;For developers, the main benefit is control. The application keeps ownership of the data pipeline, database connection, security model, and report logic, while List &amp;amp; Label handles the reporting layer: design, preview, rendering, export, and distribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  In short
&lt;/h2&gt;

&lt;p&gt;MySQL reporting does not have to mean manually generating files or rebuilding the same export logic again and again. With an embedded reporting tool like List &amp;amp; Label, MySQL data can become integrated, interactive, and automated reporting directly inside your application.&lt;/p&gt;

&lt;p&gt;Read the full guide, which includes a code example showing &lt;a href="https://www.combit.com/create-reports-from-mysql-databases-with-list-label/" rel="noopener noreferrer"&gt;how to create reports from MySQL databases&lt;/a&gt; using List &amp;amp; Label. &lt;/p&gt;

</description>
      <category>mysql</category>
      <category>analytics</category>
      <category>softwaredevelopment</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Oracle Database Reporting Tool</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Wed, 22 Oct 2025 07:24:24 +0000</pubDate>
      <link>https://dev.to/combit/alternative-oracle-database-reporting-tool-cg4</link>
      <guid>https://dev.to/combit/alternative-oracle-database-reporting-tool-cg4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Developers working with Oracle databases often need to generate dashboards, printable reports, exports, or user-editable templates from structured data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While Oracle Reports remains a known option, it's no longer actively developed. For .NET developers seeking a modern alternative, &lt;strong&gt;List &amp;amp; Label&lt;/strong&gt; is one reporting tool that integrates with Oracle using standard components and libraries.&lt;/p&gt;

&lt;p&gt;This article outlines how it works and shows limitations and benefits.&lt;/p&gt;

&lt;p&gt;If you would like to test Oracle database reporting with List &amp;amp; Label, get the free trial linked at the end of this article.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Generate Reports Using List &amp;amp; Label
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How to Connect and Query Oracle Data
&lt;/h3&gt;

&lt;p&gt;List &amp;amp; Label connects directly to Oracle databases, making it possible to evaluate data stored in tables, views, sql statements or returned by executing stored procedures. As a reporting tool with relational database support, it also enables features like drilldown and drill-through for deeper data exploration.&lt;/p&gt;

&lt;p&gt;To connect to an Oracle database, List &amp;amp; Label uses the &lt;code&gt;OracleConnectionDataProvider&lt;/code&gt; class from the &lt;a href="https://docu.combit.net/net/en/combit.ListLabel~combit.Reporting.DataProviders_namespace.html?dlyx-id=v009c5b0s075ogatfvor4gmga8" rel="noopener noreferrer"&gt;&lt;code&gt;combit.Reporting.DataProviders&lt;/code&gt;&lt;/a&gt; namespace. This requires the &lt;a href="https://www.nuget.org/packages/Oracle.ManagedDataAccess.Core" rel="noopener noreferrer"&gt;&lt;code&gt;Oracle.ManagedDataAccess&lt;/code&gt; NuGet package&lt;/a&gt;, which provides access to Oracle's ODP.NET (Oracle Data Provider for .NET). Once set up, the entire Oracle database - including tables and views - can be queried. The code example below shows the steps for establishing the connection and launching the List &amp;amp; Label Designer to create a report.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Step1: Adding the NuGet packages for List &amp;amp; Label and Oracle 
// and the necessary using statements
using combit.Reporting;
using combit.Reporting.DataProviders;
using Oracle.ManagedDataAccess.Client;

// Step 2: Preparing the connection information for the Oracle database
OracleConnectionStringBuilder oracleConnectionStringBuilder =
    new OracleConnectionStringBuilder
    {
        DataSource = Properties.Resources.OracleInstance,
        UserID = Properties.Resources.OracleUsername,
        Password = Properties.Resources.OraclePassword,
        PersistSecurityInfo = true
    };

// Step 3: Connecting the Oracle connection with the appropriate List &amp;amp; Label data provider 
OracleConnectionDataProvider oracleDataProvider = 
    new OracleConnectionDataProvider(
        oracleConnectionStringBuilder.ConnectionString,
        "HR"
        );

// Step 4: Creating the List &amp;amp; Label object, adding the Oracle data provider 
// and calling the Designer 
using (ListLabel LL = new ListLabel())
{
    LL.DataSource = oracleDataProvider;
    LL.Design();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡Tip: The article &lt;a href="https://forum.combit.net/t/using-the-dbcommandsetdataprovider-with-stored-procedures/5140" rel="noopener noreferrer"&gt;Using the DbCommandSetDataProvider With Stored Procedures&lt;/a&gt; shows how easy it is to access stored procedures in an Oracle database. These can then be used as data sources for reports. This also works with Oracle databases. If necessary, just use additional individual SQL statements in the process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Features and Benefits of Oracle DB Reporting with List &amp;amp; Label
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Native Oracle Database Integration via ODP.NET
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advantage&lt;/strong&gt;: Uses Oracle’s own managed data provider (Oracle.ManagedDataAccess via NuGet).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: No need for custom drivers or data abstraction layers. Developers can connect directly to Oracle and access tables, views, stored procedures, or SQL statements.&lt;/p&gt;

&lt;h3&gt;
  
  
  OracleConnectionDataProvider in .NET
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advantage&lt;/strong&gt;: Exposes Oracle schema as structured objects usable in the List &amp;amp; Label reporting engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: Enables both developers and end-users to select and visualize Oracle data in a report designer interface, without manual object mapping.&lt;/p&gt;

&lt;h3&gt;
  
  
  WYSIWYG Report Designer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advantage&lt;/strong&gt;: GUI-based editor supports tables, charts, barcodes, crosstabs, maps, gauges, subreports and more designer objects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: End-users (non-devs) can create or update report templates without needing code changes or development cycles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-format Export Engine
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advantage&lt;/strong&gt;: Supports PDF (including ZUGFeRD/XRechnung), Excel, Word, JSON, XML, HTML, CSV, PNG, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: Reports can be distributed via email, stored as files, embedded in documents, or printed - covering most B2B and internal reporting use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-source Support
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advantage&lt;/strong&gt;: In addition to Oracle, it supports 30+ other data providers including MSSQL, PostgreSQL, SQLite, CSV, JSON, REST, Entity Framework, and custom objects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: Developers building applications with multiple backend systems can unify reporting in one tool, without switching engines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Use Cases Where It’s Relevant
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You need to replace or extend legacy Oracle Reports workflows.&lt;/li&gt;
&lt;li&gt;You want to let users define their own layouts while keeping backend logic in Oracle.&lt;/li&gt;
&lt;li&gt;You’re building .NET desktop or web apps and want to embed Oracle report generation.&lt;/li&gt;
&lt;li&gt;You need to export structured Oracle data to industry formats (XLSX, PDF, JSON, etc.).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Limitations to Be Aware Of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;List &amp;amp; Label is not open-source; licensing applies.&lt;/li&gt;
&lt;li&gt;It requires a .NET-based development environment.&lt;/li&gt;
&lt;li&gt;While Oracle-specific, the tool does not depend on Oracle Forms or Oracle APEX.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;If you're searching for an Oracle database reporting tool that integrates directly with Oracle via ODP.NET, supports customizable templates with an powerful designer, and works well in .NET environments, List &amp;amp; Label is one practical option.&lt;/p&gt;

&lt;p&gt;It covers typical developer needs - structured access, export options, and template control - without tying you to legacy tooling.&lt;/p&gt;

&lt;p&gt;For technical docs or API details:&lt;br&gt;
📖 &lt;a href="https://docu.combit.net/net/en/" rel="noopener noreferrer"&gt;Online .NET Help&lt;/a&gt;&lt;br&gt;
📊 &lt;a href="https://www.combit.com/" rel="noopener noreferrer"&gt;More about List &amp;amp; Label&lt;/a&gt;&lt;br&gt;
🧪 &lt;a href="https://www.combit.com/trial/" rel="noopener noreferrer"&gt;Get free List &amp;amp; Label Trial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>software</category>
      <category>tutorial</category>
      <category>analytics</category>
    </item>
    <item>
      <title>How to Build Fillable PDF Forms in .NET — Without Fighting the PDF Beast</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Thu, 18 Sep 2025 10:03:15 +0000</pubDate>
      <link>https://dev.to/combit/how-to-build-fillable-pdf-forms-in-net-without-fighting-the-pdf-beast-1l76</link>
      <guid>https://dev.to/combit/how-to-build-fillable-pdf-forms-in-net-without-fighting-the-pdf-beast-1l76</guid>
      <description>&lt;p&gt;Create fully fillable PDF forms in .NET with the &lt;em&gt;List &amp;amp; Label&lt;/em&gt; software component — fast, simple, and without extra tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡TL;DR
&lt;/h2&gt;

&lt;p&gt;Edit existing PDF files or forms and add form elements. Or build a form from scratch.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design forms visually in the report designer&lt;/li&gt;
&lt;li&gt;Use form elements (text boxes, checkboxes etc.) in the form&lt;/li&gt;
&lt;li&gt;Export directly to interactive PDF with just a few lines of C# code&lt;/li&gt;
&lt;li&gt;No Acrobat Pro, no external PDF SDKs, List &amp;amp; Label uses its onw export engine&lt;/li&gt;
&lt;li&gt;Supports compliance standards like PDF/A and ZUGFeRD e-invoices out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 See how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Impractical and Poor PDF Files
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🤦‍♂️Problem&lt;/strong&gt;&lt;br&gt;
You export a report or form to PDF. It looks nice… but your users can’t actually use it. No fields. No checkboxes. Just a flat file.&lt;/p&gt;

&lt;p&gt;That’s frustrating for you and for your users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;😊Solution&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;List &amp;amp; Label&lt;/em&gt; fixes that. It lets you design your form visually with real, editable form elements and export it to PDF with just a few lines of code.&lt;/p&gt;
&lt;h2&gt;
  
  
  🚦 Getting Started Without the Complexity
&lt;/h2&gt;

&lt;p&gt;If you're new to .NET or just dipping your toes into working with PDF exports, List &amp;amp; Label won’t overwhelm you.&lt;/p&gt;

&lt;p&gt;You don’t need to learn PDF internals, wrestle with Acrobat, or deal with brittle third-party tools.&lt;/p&gt;

&lt;p&gt;With List &amp;amp; Label, you can design, export, and test fillable PDF forms directly from your app visually and with just a few lines of code.&lt;/p&gt;
&lt;h2&gt;
  
  
  🛠️ First Steps: Try It in Your Own Project
&lt;/h2&gt;

&lt;p&gt;Here’s how to get up and running:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Download &amp;amp; Install&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get the &lt;a href="https://www.combit.com/trial/" rel="noopener noreferrer"&gt;List &amp;amp; Label trial for free&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add the NuGet package

&lt;ul&gt;
&lt;li&gt;Supports .NET Framework, .NET Core, and .NET 6–9&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Open a sample project from GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse the &lt;a href="https://github.com/combit/ll-samples" rel="noopener noreferrer"&gt;GitHub samples&lt;/a&gt; for WinForms, WPF, ASP.NET, or Blazor&lt;/li&gt;
&lt;li&gt;Pick the one that matches your stack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Run &amp;amp; Explore&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the sample to see how it connects to a data source&lt;/li&gt;
&lt;li&gt;Open the Report Designer from the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Use the Report Designer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a project file&lt;/li&gt;
&lt;li&gt;Drag in a text field or checkbox&lt;/li&gt;
&lt;li&gt;Save and export as PDF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now your form has fillable fields.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Export from C#&lt;/strong&gt;&lt;br&gt;
Export is just a few lines of code — no Acrobat needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ListLabel&lt;/span&gt; &lt;span class="n"&gt;LL&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ListLabel&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Define data source&lt;/span&gt;
    &lt;span class="n"&gt;LL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataSource&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;CreateDataSet&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// Creating the export configuration (the target format here is PDF)&lt;/span&gt;
    &lt;span class="n"&gt;ExportConfiguration&lt;/span&gt; &lt;span class="n"&gt;exportConfiguration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ExportConfiguration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LlExportTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pdf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;Dateipfad der PDF-Datei&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;Dateipfad der Layout-Datei&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Optional: show result&lt;/span&gt;
    &lt;span class="n"&gt;exportConfiguration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ShowResult&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Export&lt;/span&gt;
    &lt;span class="n"&gt;LL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exportConfiguration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Open your PDF and test the fields&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’ll now have a PDF your users can interact with — no printing or scanning required.&lt;/p&gt;

&lt;p&gt;And it just works.&lt;br&gt;
No third-party Acrobat software. No hand-coded layout logic. &lt;/p&gt;

&lt;p&gt;👉 You're Not Alone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Friendly &lt;a href="https://forum.combit.net/c/english/6" rel="noopener noreferrer"&gt;community forum&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Clear, well-organized &lt;a href="https://docu.combit.net/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✅ Stay Compliant with Zero Extra Effort
&lt;/h2&gt;

&lt;p&gt;Working on invoices or anything long-term? List &amp;amp; Label supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF/A for archival-safe documents&lt;/li&gt;
&lt;li&gt;ZUGFeRD for smart e-invoices (with structured XML baked into the PDF)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s compliance handled — no standards manual required.&lt;/p&gt;

&lt;h2&gt;
  
  
  💬What's next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Get started with the &lt;a href="https://www.combit.com/trial/" rel="noopener noreferrer"&gt;free trial&lt;/a&gt; now&lt;/li&gt;
&lt;li&gt;Or browse the &lt;a href="https://www.combit.blog/en/tag/pdf/" rel="noopener noreferrer"&gt;PDF section&lt;/a&gt; in the Reporting Blog to discover more feature developments around the PDF format&lt;/li&gt;
&lt;li&gt;Or leave a comment if you have any questions&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>csharp</category>
      <category>pdf</category>
      <category>softwaredevelopment</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>New Features for the Web Report Designer in List &amp; Label 28</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Mon, 13 Mar 2023 08:32:30 +0000</pubDate>
      <link>https://dev.to/combit/new-features-for-the-web-report-designer-in-list-label-28-106d</link>
      <guid>https://dev.to/combit/new-features-for-the-web-report-designer-in-list-label-28-106d</guid>
      <description>&lt;p&gt;The &lt;strong&gt;Web Report Designer&lt;/strong&gt; is a central element &lt;strong&gt;if you’re using List &amp;amp; Label in web applications&lt;/strong&gt;. We’re constantly improving and adding to it, and with the release of version 28, we’ve added many new objects and functions again. Here’s a quick overview of the new features.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Designer Objects
&lt;/h2&gt;

&lt;p&gt;The following Designer objects are now supported since version 28 – both as standalone objects and also in tables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gauges, visualizing data as speedometers, thermometers, etc.&lt;/li&gt;
&lt;li&gt;Data graphics, visualizing data as pictograms&lt;/li&gt;
&lt;li&gt;Checkboxes, displaying true/false values&lt;/li&gt;
&lt;li&gt;PDFs to use as background for forms, or more complex document parts that are available as PDF files&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pie Charts
&lt;/h2&gt;

&lt;p&gt;Finally, pie charts can be created directly in the Web Report Designer, and being used as standalone objects as well as in tables. In order to achieve this, a completely new editing mode has been integrated into the Web Report Designer. This editing mode can be opened directly in the workspace, just using a separate button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2la7p3zh775belm74ze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2la7p3zh775belm74ze.png" alt="pie chart in web report designer" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other chart types are already in the making, and will be gradually integrated. Our goal is to transform the Web Report Designer into a fully-fledged, browser-based replacement for the previous Windows app-based Web Designer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;Provide the content of your repository with more structure and clarity. Folder structures are automatically supported now, without doing changes to existing implementations. Project files, but also additional files such as images, etc., can now be created and managed right within folder structures.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmftj8trgax0e2qmyvog3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmftj8trgax0e2qmyvog3.png" alt="Elements in Web Report Designer" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table Editor
&lt;/h2&gt;

&lt;p&gt;Create and move fields easily with drag &amp;amp; drop. Also, adjusting their properties got a lot easier and more convenient with the new table editor.  Currently available are text fields, images, barcodes, checkboxes and PDF files. You can also insert data graphics, gauges, and charts really quick and easy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frd34plzmy1hjbcoo51v6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frd34plzmy1hjbcoo51v6.png" alt="Table Editor Web Reports" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Export Right from the Designer
&lt;/h2&gt;

&lt;p&gt;Create your reports in the Designer and export right from there to check your layout on different output media.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyvxdyux0qidydonr52j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyvxdyux0qidydonr52j.png" alt="Export Options Web Report Designer" width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Online Demo
&lt;/h2&gt;

&lt;p&gt;If you like to take a closer look at the Web Report Designer in List &amp;amp; Label check out the &lt;a href="https://www.combit.com/web-reporting-list-label/?reportRepositoryID=repository%3A%2F%2F%7B4BF96B30-2753-45ED-A4BD-4747C9977309%7D&amp;amp;dlyx_xs=mhd6vdtvblnluo18d32fip2k3g" rel="noopener noreferrer"&gt;interactive Online Demo&lt;/a&gt;.&lt;br&gt;
Or directly get the &lt;a href="https://www.combit.com/trial/" rel="noopener noreferrer"&gt;free List &amp;amp; Label trial&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>news</category>
      <category>datavisualization</category>
      <category>reportdesign</category>
    </item>
    <item>
      <title>Creating reports from MariaDB databases</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Tue, 07 Feb 2023 09:26:48 +0000</pubDate>
      <link>https://dev.to/combit/creating-reports-from-mariadb-databases-45ff</link>
      <guid>https://dev.to/combit/creating-reports-from-mariadb-databases-45ff</guid>
      <description>&lt;p&gt;Learn how to easily bind report generator List &amp;amp; Label to MariaDB data to create comprehensive reports and other output in various formats.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MariaDB?
&lt;/h2&gt;

&lt;p&gt;MariaDB is a free relational database system created from a fork of MySQL. It is compatible with MySQL in almost all respects and can thus be connected in the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating reports from MariaDB data sources
&lt;/h2&gt;

&lt;p&gt;List &amp;amp; Label can be easily bound to MariaDB data. This allows you to create comprehensive reports based on your existing MariaDB data. Relational links are also supported, allowing you to drill down or drill through your data.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can List &amp;amp; Label be linked to MariaDB data sources?
&lt;/h2&gt;

&lt;p&gt;Since the release of version 28 in 2022, List &amp;amp; Label  offers the &lt;code&gt;MariaDBConnectionDataProvider&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A minimal sample for using the new provider would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using MariaDBConnectionDataProvider provider = new MariaDBConnectionDataProvider(
    $"server={address};userid={userid};password={password};database={database}")
{
    using ListLabel LL = new ListLabel();
    {
        LL.DataSource = provider;
        LL.Design();
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which gives the following result in the Designer:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd2dsxv1y4p4u9v17ylt4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd2dsxv1y4p4u9v17ylt4.png" alt="result mariaDB query in designer" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you do not want to provide all but only some tables in Designer, you can also use the &lt;a href="https://docu.combit.net/net/en/combit.ListLabel~combit.Reporting.DataProviders.DbCommandSetDataProvider.html" rel="noopener noreferrer"&gt;DbCommandSetDataProvider&lt;/a&gt; to connect to MariaDB databases.&lt;/p&gt;

&lt;h2&gt;
  
  
  More about MariaDB and List &amp;amp; Label
&lt;/h2&gt;

&lt;p&gt;You can also find more valuable information about using List &amp;amp; Label in the &lt;a href="https://docu.combit.net/net/en/Tutorial.html" rel="noopener noreferrer"&gt;.NET Tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It doesn’t matter if you have a classic Windows desktop or a modern web application using ASP.NET - the List &amp;amp; Label &lt;a href="https://docu.combit.net/net/en/combit.ListLabel~combit.Reporting.DataProviders_namespace.html" rel="noopener noreferrer"&gt;data providers&lt;/a&gt; can be used in both worlds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Want to see more or try it for yourself?
&lt;/h3&gt;

&lt;p&gt;Have a look at the &lt;a href="https://www.combit.com/list-label-online-demo/" rel="noopener noreferrer"&gt;Online Demo&lt;/a&gt; or get the fully-functional &lt;a href="https://www.combit.com/trial/" rel="noopener noreferrer"&gt;List &amp;amp; Label trial&lt;/a&gt; if you want to try it yourself&lt;/p&gt;

&lt;p&gt;Please leave a reply to this post if you have any questions about creating reports with List &amp;amp; Label based on data from MariaDB databases or if you are missing information on this topic.&lt;/p&gt;

</description>
      <category>mariadb</category>
      <category>database</category>
      <category>reporting</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Miscellaneous Treats in .NET Report Generator List &amp; Label 27</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Tue, 24 May 2022 09:58:01 +0000</pubDate>
      <link>https://dev.to/combit/miscellaneous-treats-in-net-report-generator-list-label-27-2g3h</link>
      <guid>https://dev.to/combit/miscellaneous-treats-in-net-report-generator-list-label-27-2g3h</guid>
      <description>&lt;p&gt;As with every version, there are way too many new features in version 27 to cover them all. So here’s a quick summary of some of the rather hidden gems that still deserve some attention.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supporting Windows 11, Visual Studio 2022 and .NET 6&lt;/li&gt;
&lt;li&gt;Parametrized data sources now support passing a “displayformula” option in order to set the displayed value for the auto generated parameter. This allows the use ID values for the parameter itself, while displaying a user friendly substitution.&lt;/li&gt;
&lt;li&gt;The AskString$ and AskStringChoice$ dialogs are now resizable.&lt;/li&gt;
&lt;li&gt;New barcode type added: Pharmacode&lt;/li&gt;
&lt;li&gt;New image type added: SVGZ (compressed SVG)&lt;/li&gt;
&lt;li&gt;Report parameters can now be validated via a regular expression.&lt;/li&gt;
&lt;li&gt;The Drawing() function can receive a valid SVG string, which will be converted into an image on the fly, e.g. Drawing(‘’).&lt;/li&gt;
&lt;li&gt;Lines are now exported as inline SVG files, when exporting to XHTML. Line styles are also partly supported, diagonal lines are no longer raster images.&lt;/li&gt;
&lt;li&gt;The .NET component now automatically tries to decode Base64 encoded images, if they are defined e.g. via LL.Fields.Add(“MyBase64Image”, Base64String, LlFieldType.Drawing). Note: this feature requires the Base64 string to be padded to a multiple of four bytes with “=” as defined in RFC 4648.&lt;/li&gt;
&lt;li&gt;If a preview contains input objects, the ribbon now provides two different PDF modes (PDF with input objects and PDF with input data as fixed text).&lt;/li&gt;
&lt;li&gt;JPEG images with EXIF rotation information are automatically displayed correctly now.&lt;/li&gt;
&lt;li&gt;The extended properties of 2D barcodes (Aztec, QRCode, DataMatrix, PDF417, MicroPDF417, Maxicode) are now accessible via DOM.&lt;/li&gt;
&lt;li&gt;Pie charts now support a maximum segment count. All additional segments will then be summarized as “Others”. Before, there was only a minimum share, which was not flexible enough in cases where many segments had the same (small) share.&lt;/li&gt;
&lt;li&gt;The HTML object now supports https for downloads.&lt;/li&gt;
&lt;li&gt;VCL FireDac: the ExportOptions can now be set directly via the ExportOptions class.&lt;/li&gt;
&lt;li&gt;VCL FireDac: simplified variant for setting options &amp;amp; print options &lt;/li&gt;
&lt;li&gt;Crosstab label cells can now contain an image.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This wraps up the feature posts on version 27 – we’ll start blogging about the upcoming version 28 pretty soon. Stay tuned!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.combit.com/version-27-list-label/" rel="noopener noreferrer"&gt;More New Features in List &amp;amp; Label 27&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>news</category>
      <category>dotnet</category>
      <category>component</category>
    </item>
    <item>
      <title>Creating Reports from Microsoft Access Databases with List &amp; Label</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Wed, 19 Jan 2022 07:30:20 +0000</pubDate>
      <link>https://dev.to/combit/creating-reports-from-microsoft-access-databases-with-list-label-38g0</link>
      <guid>https://dev.to/combit/creating-reports-from-microsoft-access-databases-with-list-label-38g0</guid>
      <description>&lt;p&gt;Create reports based on your existing Microsoft Access databases with the reporting component List &amp;amp; Label. See how it works here.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Create Reports with List &amp;amp; Label Using Data from Microsoft Access Databases
&lt;/h2&gt;

&lt;p&gt;List &amp;amp; Label can be easily bound to Microsoft Access databases. This allows you to create comprehensive reports based on your existing Access data, whether it is in tables or stored procedures. Relational databases are also supported out of the box, enabling you to drill down or drill through your data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Samples for Binding Microsoft Access Databases to List &amp;amp; Label
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;OleDbConnection&lt;/code&gt; of the .NET Framework is used as a basis, which uses the Jet OleDb driver to access the Microsoft Access database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect to Access Database
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;string databasePath = @"c:\temp\Northwind.mdb";
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + databasePath;
OleDbConnection myOleDbConnection = new OleDbConnection(connStr);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: For 32-bit applications, the Jet OleDB driver can still be used. But for a 64-bit application, this driver reaches its limits and an alternative must be found. For this purpose, Microsoft itself offers the ACE OleDB driver, which is provided as the &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=54920" rel="noopener noreferrer"&gt;Microsoft Access Database Engine&lt;/a&gt;. Accordingly, &lt;code&gt;connStr&lt;/code&gt; must be adapted as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;string databasePath = @"c:\temp\Northwind.mdb";
string connStr = "Provider=Microsoft.Jet.ACE.OLEDB.12.0;Data Source=" + databasePath;
OleDbConnection myOleDbConnection = new OleDbConnection(connStr);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: For successful installation and registration of the ACE OleDB driver, a suitable 64-bit Office installation is required on the target system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assign Data from Microsoft Access Database to List &amp;amp; Label
&lt;/h2&gt;

&lt;p&gt;Once the appropriate connection has been provided using &lt;code&gt;OleDbConnection&lt;/code&gt;, there are a number of ways to access the Microsoft Access database data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Load the Data into an ADO DataSet
&lt;/h3&gt;

&lt;p&gt;List &amp;amp; Label gets access to ADO objects with the help of the &lt;a href="https://docu.combit.net/net/de/combit.ListLabel~combit.Reporting.DataProviders.AdoDataProvider.html" rel="noopener noreferrer"&gt;AdoDataProvider&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Connect to the Microsoft Access database
string databasePath = @"c:\temp\Northwind.mdb";
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + databasePath;
OleDbConnection oleDbConn = new OleDbConnection(connStr);
oleDbConn.Open();

DataSet ds = new System.Data.DataSet();

// Add table 'Customers' to the DataSet
string sqlCustomers = "SELECT * FROM [Customers]";
OleDbCommand commandCustomers = new OleDbCommand(sqlCustomers, oleDbConn);
OleDbDataAdapter daCustomers = new OleDbDataAdapter(commandCustomers);
daCustomers.FillSchema(ds, SchemaType.Source, "Customers");
daCustomers.Fill(ds, "Customers");

// Add table 'Orders' to the DataSet
string sqlOrders = "SELECT * FROM [Orders]";
OleDbCommand commandOrders = new OleDbCommand(sqlOrders, oleDbConn);
OleDbDataAdapter daOrders = new OleDbDataAdapter(commandOrders);
daOrders.FillSchema(ds, SchemaType.Source, "Orders");
daOrders.Fill(ds, "Orders");

// Define relation between tables
string relName = "Customers2Orders";
ds.Relations.Add(new DataRelation(relName, "CustomerId", "CustomerId"));

// Create the List &amp;amp; Label object and attach the ADO DataSet
// and call the designer
using(ListLabel LL = new ListLabel())
{
    LL.DataSource = new AdoDataProvider(ds);
    LL.Design();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Load Data Directly as &lt;code&gt;IDbCommand&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;With the help of &lt;a href="https://docu.combit.net/net/en/combit.ListLabel~combit.Reporting.DataProviders.DbCommandSetDataProvider.html" rel="noopener noreferrer"&gt;DbCommandSetDataProvider&lt;/a&gt; List &amp;amp; Label has direct access to the data via IDbCommand. The advantage of this variant is that the data is not loaded into memory in advance as it is the case with the DataSet, especially with very large databases this is important:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Connect to the Microsoft Access database
string databasePath = @"c:\temp\Northwind.mdb";
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + databasePath;
OleDbConnection oleDbConn = new OleDbConnection(connStr);
oleDbConn.Open();

DbCommandSetDataProvider provider = new DbCommandSetDataProvider();

// Add table 'Customers' to the DataSet
string sqlCustomers = "SELECT * FROM [Customers]";
OleDbCommand commandCustomers = new OleDbCommand(sqlCustomers, oleDbConn);
provider.AddCommand(commandCustomers, "Customers");

// Add table 'Orders'
string sqlOrders = "SELECT * FROM [Orders]";
OleDbCommand commandOrders = new OleDbCommand(sqlOrders, oleDbConn);
provider.AddCommand(commandOrders , "Orders");

// Define relation between tables
string relName = "Customers2Orders";
provider.AddRelation(relName, "Customers", "Orders", "CustomerID", "CustomerID");

// Create the List &amp;amp; Label object and attach the ADO DataSet
// and call the designer
using(ListLabel LL = new ListLabel())
{
    LL.DataSource = provider;
    LL.Design();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  More about Microsoft Access Reporting and List &amp;amp; Label
&lt;/h2&gt;

&lt;p&gt;Also see the &lt;a href="https://docu.combit.net/net/en/Tutorial.html" rel="noopener noreferrer"&gt;.NET Tutorial&lt;/a&gt; for even more valuable information on using List &amp;amp; Label.&lt;/p&gt;

&lt;p&gt;It doesn’t matter if you have a classic Windows desktop application or a modern web application with ASP.NET - the List &amp;amp; Label &lt;a href="https://docu.combit.net/net/en/combit.ListLabel~combit.Reporting.DataProviders_namespace.html" rel="noopener noreferrer"&gt;data providers&lt;/a&gt; can be used in both worlds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The installation of List &amp;amp; Label already delivers numerous programming samples that use Microsoft Access databases as data sources. These can also be viewed in our &lt;a href="https://github.com/combit/ll-samples" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please leave a reply to this post if you’ve got questions about how to create reports with List &amp;amp; Label based on data from Microsoft Access databases or if you miss any information about this topic.&lt;/p&gt;

&lt;p&gt;If you already enjoy connecting Microsoft Access databases as datasource to List &amp;amp; Label for creating amazing reports, feel free to show your love with a heart for this post. 💖 🙂&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>dotnet</category>
      <category>tools</category>
    </item>
    <item>
      <title>Creating Charts via Drag &amp; Drop in the Desktop Designer</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Tue, 18 Jan 2022 13:47:04 +0000</pubDate>
      <link>https://dev.to/combit/creating-charts-via-drag-drop-in-desktop-designer-3214</link>
      <guid>https://dev.to/combit/creating-charts-via-drag-drop-in-desktop-designer-3214</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr List &amp;amp; Label is a reporting component for software developers and improved the Drag &amp;amp; Drop support for charts in the desktop designer. Check out the example below to see how it works.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.combit.com/" rel="noopener noreferrer"&gt;List &amp;amp; Label’s&lt;/a&gt; chart dialog offers a load of possible customizations. However, as always, with great power comes great complexity. Even creating a simple pie chart could have taken some time if you’re not yet familiar with List &amp;amp; Label’s chart features. As you can already easily create crosstabs via Drag &amp;amp; Drop, and we just recently improved the table’s drag &amp;amp; drop features, offering a thorough D&amp;amp;D support for charts was the next logical step on our path to a simpler, more intuitive end user desktop designer.&lt;/p&gt;

&lt;p&gt;For a quick walkthrough, let’s start with a simple pie chart in our demo application – the distribution of customers by country. Simply drag the Customers.Country field to the workspace and drop it there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd02bcumxwd7fl02fvm7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd02bcumxwd7fl02fvm7a.png" alt="drag and drop field" width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This brings up the following choices:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdx8qj9krsdbrqrc024f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdx8qj9krsdbrqrc024f2.png" alt="chart dialogue" width="542" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note the last entry, which is new to List &amp;amp; Label 27. In the next step, you choose the chart type directly in the workspace:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fidk0vwo4vv6n1oj6q0zd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fidk0vwo4vv6n1oj6q0zd.png" alt="choose chart type" width="557" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As we’re happy with the default for this case – that’s all. The preview shows the result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5sxwtj3t1zftnpl2a50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5sxwtj3t1zftnpl2a50.png" alt="chart result" width="405" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a more complicated example, let’s compare the sales for the different regions EMEA, NAFTA and APAC through the years. To create this, just drag Sales.Year and drop it on the workspace. Choose “Bar” and “Clustered”. As we already have aggregated values in the EMEA, NAFA and APAC fields of the database, we want to create the values by series. So let’s choose this.&lt;/p&gt;

&lt;p&gt;Now, simply create the series by dropping the APAC, EMEA and NAFTA fields into the designated area. After that, here’s what the workspace looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fga3vvq5uggg66wv2q9zn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fga3vvq5uggg66wv2q9zn.png" alt="bar chart workspace" width="553" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, you still need to tweak sometimes – as for example, the years have two digits here, as they aren’t integer fields in the database. Of course, the dialog with all its properties is always still available to the rescue. Simply double-click the chart to bring up the dialog. Take note of the new, (hopefully) helpful tooltip while you’re there:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizfhkbyd1zzoi92leyfv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizfhkbyd1zzoi92leyfv.png" alt="tool tip" width="352" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’ve added these to a number of places to highlight often overlooked features. You can immediately apply this new knowledge and click on one of the year labels in the dialog’s preview, in order to get to the coordinate value and edit its format property:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fog5iayx18nqwnto1b55n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fog5iayx18nqwnto1b55n.png" alt="edit format" width="732" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which (after doing the same tweak for the y-Axis) results in:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r8vbgzgb2gaulgtswgq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r8vbgzgb2gaulgtswgq.png" alt="bar chart result" width="531" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’re pretty sure this new feature makes the creation of your charts much easier and intuitive.&lt;/p&gt;

&lt;p&gt;Visit our &lt;a href="https://www.combit.blog/en/" rel="noopener noreferrer"&gt;Reporting Blog&lt;/a&gt; to find out more about topics that keep us busy.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>reporting</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Creating EPC Barcodes with Report Generator List &amp; Label</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Thu, 28 Oct 2021 12:20:47 +0000</pubDate>
      <link>https://dev.to/combit/creating-epc-barcodes-with-report-generator-list-label-4af1</link>
      <guid>https://dev.to/combit/creating-epc-barcodes-with-report-generator-list-label-4af1</guid>
      <description>&lt;h2&gt;
  
  
  What is an EPC Barcode?
&lt;/h2&gt;

&lt;p&gt;An EPC QR code is a data format standardized by &lt;a href="https://www.europeanpaymentscouncil.eu/" rel="noopener noreferrer"&gt;the European Payments Council&lt;/a&gt; that contains all the data for a SEPA credit transfer and is machine-readable via QR coding. A brief description of the format can be found here:&lt;/p&gt;


&lt;div class="ltag__wikipedia--container"&gt;
  &lt;div class="ltag__wikipedia--header"&gt;
    &lt;img src="https://assets.dev.to/assets/wikipedia-logo-0a3e76624c7b1c3ccdeb9493ea4add6ef5bd82d7e88d102d5ddfd7c981efa2e7.svg" class="ltag__wikipedia--logo" alt="Wikipedia Logo"&gt;
    &lt;a href="https://en.wikipedia.org/wiki/EPC_QR_code" rel="noopener noreferrer"&gt;EPC QR code&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="ltag__wikipedia--extract"&gt;&lt;p&gt;The &lt;b&gt;European Payments Council&lt;/b&gt; (&lt;b&gt;EPC&lt;/b&gt;) &lt;b&gt;Quick Response&lt;/b&gt; (&lt;b&gt;QR&lt;/b&gt;) &lt;b&gt;code&lt;/b&gt; is a technical standard by the European Payments Council. It uses a QR code containing all the necessary information for initiating a SEPA credit transfer (SCT). It is commonly used on invoices and payment requests in the countries that support it.&lt;/p&gt;&lt;/div&gt;
  &lt;div class="ltag__wikipedia--btn--container"&gt;
      &lt;a class="ltag__wikipedia--btn" href="https://en.wikipedia.org/wiki/EPC_QR_code" rel="noopener noreferrer"&gt;View on Wikipedia&lt;/a&gt;&amp;gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Procedure - How to Create Barcodes With List &amp;amp; Label
&lt;/h2&gt;

&lt;p&gt;With List &amp;amp; Label you can easily create such a barcode by encoding the content according to the standard. A formula for such a barcode would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Barcode(
/* Service tag */
"BCD"+chr$(13)+
/* Version */
"002"+chr$(13)+
/* Character set */
"2" +chr$(13)+
/* SEPA Credit Transfer */
"SCT" +chr$(13)+
/* Recipient's BIC */
"GENODE61RAD"+chr$(13)+
/* Recipient's name */
"combit GmbH"+chr$(13)+
/* Recipient's IBAN */
"DE36692910000214809206"+chr$(13)+
/* Amount */
"EUR0.01"+chr$(13)+
/* Purpose, optional */
"CHAR" +chr$(13)+
/* Reference */
"" +chr$(13)+
/* Reason */
"Charity for combit"+chr$(13)+
/* Hint */
"Hint", 
"QRCode"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting barcode can then be scanned in all common applications:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1ybebtquvegmb69xatx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1ybebtquvegmb69xatx.png" alt="example epc barcode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any questions, please leave a comment. &lt;br&gt;
Want to test it yourself? Get a &lt;a href="https://www.combit.com/trial/" rel="noopener noreferrer"&gt;free trial of List &amp;amp; Label&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>learning</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Revisiting C# Script Performance</title>
      <dc:creator>Pius Richter</dc:creator>
      <pubDate>Wed, 13 Oct 2021 14:18:02 +0000</pubDate>
      <link>https://dev.to/combit/revisiting-c-script-performance-4p7k</link>
      <guid>https://dev.to/combit/revisiting-c-script-performance-4p7k</guid>
      <description>&lt;p&gt;This is another often overlooked feature in our &lt;a href="https://www.combit.com/" rel="noopener noreferrer"&gt;reporting tool List &amp;amp; Label&lt;/a&gt;  – &lt;strong&gt;you can add scripts to your projects and use your favorite language to do so&lt;/strong&gt;. Since a couple of versions already, List &amp;amp; Label supports C# Scripts. However, the performance was less than perfect, making it a good choice for complex calculations but not so much for using it on a line-to-line base. In List &amp;amp; Label 26, we were able to push the performance quite remarkably – now using scripts is perfectly feasible.&lt;/p&gt;

&lt;p&gt;One reason why many people overlook the scripting feature is that it is opt-in. For security reasons, we decided to default the availability to false. Switching it on is just a matter of setting the option LL_OPTION_SCRIPTENGINE_ENABLED (index 276) to 1. Let’s do a quick walkthrough, using the “order list with scripting” sample report of the demo application. It displays the order number, order and delivery date and a script-powered calculation of the number of working days between those two dates. &lt;/p&gt;

&lt;p&gt;The last column in the report just reads:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ScriptVal ("CSharpScript", LoadFile$ (ProjectPath$() + "WorkingDays.cs"))&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;That means, load the WorkingDays.cs script from within the project path and return its value. So let’s dig into the script. The crucial part is the Main() method:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;static void Main()&lt;br&gt;
{&lt;br&gt;
var workDayCalc = new WorkingDaysCalculator();&lt;br&gt;
WScript.Result = workDayCalc.Calculate(Report.Field("Orders.OrderDate"), Report.Field("Orders.ShippedDate"));&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The WorkingDaysCalculator is just a simple class to calculate the working days in a quite simple manner. The more interesting part is the usage of the Report object that’s added dynamically. It has a couple of methods:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method name&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Eval&lt;/td&gt;
&lt;td&gt;Evaluates a full List &amp;amp; Label formula, based on the provided fields and variables at the time of evaluation-aligned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;Gets the value of a variable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field&lt;/td&gt;
&lt;td&gt;Gets the value of a field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SetVar&lt;/td&gt;
&lt;td&gt;Sets a variable in the report that can later be retrieved by using GetVar() outside of the script&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GetVar&lt;/td&gt;
&lt;td&gt;Gets a variable from the report that was set earlier by using SetVar() outside of the script&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Using these methods, you can easily interact with the report and your data. And by setting WScript.Result, you can return a value for the ScriptVal function as shown above. &lt;/p&gt;

&lt;p&gt;Additionally, there is also the possibility of debugging your scripts. All you have to do is add the line&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;!--#pragma debugmode--&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;at the very beginning of the script. This will automatically include the following code at the start of the Main() method which will start a suitable debugger (if there is one installed on your system), attach it to the LL process, and break before any of the actual code gets executed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;System.Diagnostics.Debugger.Launch();
if (System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Break();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looking forward to seeing more usage of this hidden gem in the future :-).&lt;/p&gt;

&lt;p&gt;Please leave a comment if you have any questions. Or just visit our &lt;a href="https://www.combit.blog/en/" rel="noopener noreferrer"&gt;blog&lt;/a&gt; to get to know us a bit better.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>coding</category>
      <category>reporting</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
