<?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: Syeda Samaha Batool Rizvi</title>
    <description>The latest articles on DEV Community by Syeda Samaha Batool Rizvi (@samaharizvi4578).</description>
    <link>https://dev.to/samaharizvi4578</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1379568%2Fc16a6def-5f9d-4386-87b7-3a0abad1b884.png</url>
      <title>DEV Community: Syeda Samaha Batool Rizvi</title>
      <link>https://dev.to/samaharizvi4578</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samaharizvi4578"/>
    <language>en</language>
    <item>
      <title>DataTables Deep Dive</title>
      <dc:creator>Syeda Samaha Batool Rizvi</dc:creator>
      <pubDate>Fri, 08 May 2026 10:34:54 +0000</pubDate>
      <link>https://dev.to/samaharizvi4578/datatables-deep-dive-e2c</link>
      <guid>https://dev.to/samaharizvi4578/datatables-deep-dive-e2c</guid>
      <description>&lt;p&gt;Notes&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ &lt;strong&gt;DataTables Key Extensions (Quick Reference)&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📋 &lt;strong&gt;KeyTable&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Navigate/select individual table cells (Excel-style).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Great for keyboard-based data entry.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔁 &lt;strong&gt;AutoFill&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Drag to duplicate or increment data like spreadsheets.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧾 &lt;strong&gt;Buttons&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Built-in buttons for &lt;strong&gt;export &amp;amp; copy&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;code&gt;copy&lt;/code&gt; → Copy to clipboard&lt;/li&gt;
&lt;li&gt;📁 &lt;code&gt;csv&lt;/code&gt; → Export to CSV&lt;/li&gt;
&lt;li&gt;📊 &lt;code&gt;excel&lt;/code&gt; → Export to XLSX &lt;em&gt;(requires JSZip)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;📄 &lt;code&gt;pdf&lt;/code&gt; → Export to PDF &lt;em&gt;(requires PDFMake)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;🖨️ &lt;code&gt;print&lt;/code&gt; → Print table&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;HTML5 Variants:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;copyHtml5&lt;/code&gt;, &lt;code&gt;csvHtml5&lt;/code&gt;, &lt;code&gt;excelHtml5&lt;/code&gt;, &lt;code&gt;pdfHtml5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Use generic ones; they auto-detect browser capabilities.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom Buttons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;text:&lt;/code&gt; label text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;action:&lt;/code&gt; function to execute on click&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Example: Add your own “Reload” or “Sync” button.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  👁️‍🗨️ &lt;strong&gt;Column Visibility (colvis)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Toggle visibility of single or grouped columns.&lt;/li&gt;
&lt;li&gt;Makes tables user-customizable and tidy.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧭 &lt;strong&gt;ColReorder&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Drag &amp;amp; drop to reorder columns freely.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧰 &lt;strong&gt;ColumnControl&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Adds &lt;strong&gt;per-column search/sort/filter controls&lt;/strong&gt; in headers/footers.&lt;/li&gt;
&lt;li&gt;Extendable with plugins for custom inputs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚡ &lt;strong&gt;Server-Side Processing (&lt;code&gt;serverSide: true&lt;/code&gt;)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;large datasets (100k+ rows)&lt;/strong&gt; — loads only visible data via AJAX.&lt;/li&gt;
&lt;li&gt;Client sends filters/paging/sorting state to server → server returns relevant rows.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Essential for performance-heavy dashboards.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ✏️ &lt;strong&gt;Editor (CRUD made easy)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Powerful inline data editing tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧍‍♀️ &lt;strong&gt;Full Row Editing:&lt;/strong&gt; Modal form for entire row&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Bubble Editing:&lt;/strong&gt; Quick popup for specific cells&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;⚡ &lt;strong&gt;Inline Editing:&lt;/strong&gt; Click → Type → Enter (super fast)&lt;/p&gt;

&lt;p&gt;👉 Use generator: &lt;a href="https://editor.datatables.net/generator/" rel="noopener noreferrer"&gt;editor.datatables.net/generator&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  📌 &lt;strong&gt;FixedColumns&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keep left/right columns visible while horizontally scrolling (&lt;code&gt;scrollX: true&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;For non-scrollable tables, use FixedHeader.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  📍 &lt;strong&gt;FixedHeader&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sticky headers/footers for long tables.&lt;/li&gt;
&lt;li&gt;Keeps column labels visible during scroll.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  📱 &lt;strong&gt;Responsive&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Adapts layout for smaller screens.&lt;/li&gt;
&lt;li&gt;Hides non-essential columns, adds expandable rows.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Crucial for mobile/tablet optimization.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  👥 &lt;strong&gt;RowGroup&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Group rows by a specific column value (like categories).&lt;/li&gt;
&lt;li&gt;Customize group headers and footers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ &lt;em&gt;Limitations:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No expand/collapse&lt;/li&gt;
&lt;li&gt;Only single-level grouping&lt;/li&gt;
&lt;li&gt;Not compatible with Scroller or Buttons exports yet&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ↕️ &lt;strong&gt;RowReorder&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Drag-and-drop rows to reorder.&lt;/li&gt;
&lt;li&gt;Works even with non-sequential data.&lt;/li&gt;
&lt;li&gt;Can sync changes with &lt;strong&gt;Editor&lt;/strong&gt; for DB updates.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Scroller&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Virtual rendering for huge datasets.&lt;/li&gt;
&lt;li&gt;Renders only visible rows (smooth scrolling, fast performance).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;For millions of records, this is a must.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔍 &lt;strong&gt;SearchBuilder&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build complex “AND / OR” search queries visually.&lt;/li&gt;
&lt;li&gt;Auto-detects column data types and filters accordingly.&lt;/li&gt;
&lt;li&gt;Extendable for custom logic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔎 &lt;strong&gt;SearchPanes&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add filter panes for quick visual filtering.&lt;/li&gt;
&lt;li&gt;Multi-pane, multi-value searches.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Easier for users than typing queries manually.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Select&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enables selection of &lt;strong&gt;rows, columns, or cells.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Selection modes:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;os&lt;/code&gt; (Windows-like: Ctrl + click, Shift + click)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;single&lt;/code&gt;, &lt;code&gt;multi&lt;/code&gt;, &lt;code&gt;multi+shift&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Full API: &lt;code&gt;rows().select()&lt;/code&gt;, &lt;code&gt;cells().select()&lt;/code&gt;, etc.&lt;/li&gt;

&lt;li&gt;Integrates with &lt;strong&gt;Buttons&lt;/strong&gt; for “Select all / Deselect all”.&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  💾 &lt;strong&gt;StateRestore&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Save &amp;amp; reload multiple DataTable states (filters, layout, pages).&lt;/li&gt;
&lt;li&gt;Store locally or via AJAX for user sessions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🗓️ &lt;strong&gt;DateTime&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built-in date/time picker (used by Editor &amp;amp; SearchBuilder).&lt;/li&gt;
&lt;li&gt;Integrates with &lt;strong&gt;Moment.js&lt;/strong&gt;, &lt;strong&gt;Luxon&lt;/strong&gt;, or &lt;strong&gt;Day.js&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;$('#myTable').DataTable( {&lt;br&gt;
    keys: true,&lt;br&gt;
    autoFill: true,&lt;br&gt;
    colReorder: true,&lt;br&gt;
    fixedColumns: true,&lt;br&gt;
    fixedHeader: true,&lt;br&gt;
    responsive: true,&lt;br&gt;
    rowReorder: true,&lt;br&gt;
    ajax: '/api/data',&lt;br&gt;
    scrollY: 200,&lt;br&gt;
    deferRender: true,&lt;br&gt;
    scroller: true,&lt;br&gt;
    select: true,&lt;br&gt;
    columnControl: ['order', ['orderAsc', 'orderDesc', 'search']],&lt;br&gt;
    buttons: [&lt;br&gt;
                {&lt;br&gt;
                    extend: 'pdfHtml5',&lt;br&gt;
                    title: '&amp;lt;?= $heading; ?&amp;gt;',&lt;br&gt;
                    text: 'PDF',&lt;br&gt;
                    titleAttr: 'Generate PDF',&lt;br&gt;
                    className: 'btn-outline-danger btn-sm mr-1',&lt;br&gt;
                     exportOptions: {&lt;br&gt;
                    columns: ':visible'&lt;br&gt;
                } // to download only visible columsn using colvis &lt;br&gt;
                },&lt;br&gt;
                {&lt;br&gt;
                    extend: 'excelHtml5',&lt;br&gt;
                    title: '&amp;lt;?= $heading; ?&amp;gt;',&lt;br&gt;
                    text: 'Excel',&lt;br&gt;
                    titleAttr: 'Generate Excel',&lt;br&gt;
                    className: 'btn-outline-success btn-sm mr-1'&lt;br&gt;
                },&lt;br&gt;
                {&lt;br&gt;
                    extend: 'csvHtml5',&lt;br&gt;
                    title: '&amp;lt;?= $heading; ?&amp;gt;',&lt;br&gt;
                    text: 'CSV',&lt;br&gt;
                    titleAttr: 'Generate CSV',&lt;br&gt;
                    className: 'btn-outline-primary btn-sm mr-1'&lt;br&gt;
                },&lt;br&gt;
                {&lt;br&gt;
                    extend: 'copyHtml5',&lt;br&gt;
                    title: '&amp;lt;?= $heading; ?&amp;gt;',&lt;br&gt;
                    text: 'Copy',&lt;br&gt;
                    titleAttr: 'Copy to clipboard',&lt;br&gt;
                    className: 'btn-outline-primary btn-sm mr-1'&lt;br&gt;
                },&lt;br&gt;
                 {&lt;br&gt;
                    extend: 'colvis',&lt;br&gt;
                    title: '&amp;lt;?= $heading; ?&amp;gt;',&lt;br&gt;
                    text: 'colvis',&lt;br&gt;
                    titleAttr: 'select columns',&lt;br&gt;
                    className: 'btn-outline-primary btn-sm mr-1'&lt;br&gt;
                },&lt;br&gt;
                {&lt;br&gt;
                    extend: 'print',&lt;br&gt;
                    text: 'Print',&lt;br&gt;
                    titleAttr: 'Print Table',&lt;br&gt;
                    title: '&amp;lt;?= $heading; ?&amp;gt;',&lt;br&gt;
                    customize: function (win) {&lt;br&gt;
                        $(win.document.body).find('h1').css('text-align', 'center');&lt;br&gt;
                        $(win.document.body).css('font-size', '9px');&lt;br&gt;
                        $(win.document.body).find('table')&lt;br&gt;
                            .addClass('compact')&lt;br&gt;
                            .css('font-size', 'inherit');&lt;br&gt;
                    },&lt;br&gt;
                    className: 'btn-outline-primary btn-sm'&lt;br&gt;
                },&lt;br&gt;
                //custom button &lt;br&gt;
                {&lt;br&gt;
            text: 'Reload',&lt;br&gt;
            action: function ( e, dt, node, config ) {&lt;br&gt;
                dt.ajax.reload();&lt;br&gt;
            }&lt;br&gt;
            ],&lt;br&gt;
            rowGroup: {&lt;br&gt;
        dataSrc: 'group'&lt;br&gt;
    },&lt;br&gt;
} );&lt;/code&gt;&lt;br&gt;
``&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
