C# - Custom DataList Control

This code snippet shows how to develop a simple DataList control, that can be used to present data in a list format.

DataList.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows.Forms;
  4. using System.Data;
  5. using System.Drawing;
  6.  
  7. namespace SimpleDataPagerDemo
  8. {
  9.     class DataList : Panel
  10.     {
  11.         private DataTable _dataTable;
  12.         private TableLayoutPanel _tlp = new TableLayoutPanel();
  13.  
  14.         public DataTable DataTable
  15.         {
  16.             get { return this._dataTable; }
  17.             set { this._dataTable = value; }
  18.         }
  19.  
  20.         public DataList()
  21.         {
  22.             _tlp.BackColor = Color.Black;
  23.             _tlp.CellPaint += new TableLayoutCellPaintEventHandler(_tlp_CellPaint);
  24.         }
  25.  
  26.         void _tlp_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
  27.         {
  28.             if (e.Row % 2 == 0)
  29.             {
  30.                 e.Graphics.FillRectangle(Brushes.LightSteelBlue, e.CellBounds);
  31.             }
  32.  
  33.             else
  34.             {
  35.                 e.Graphics.FillRectangle(Brushes.SteelBlue, e.CellBounds);
  36.             }
  37.         }
  38.  
  39.         public void Bind()
  40.         {
  41.             this._tlp.Controls.Clear();
  42.             int columns = this._dataTable.Columns.Count;
  43.             int idxRow = 0;
  44.             _tlp.ColumnCount = columns;
  45.             _tlp.AutoSize = true;
  46.             _tlp.Visible = false;
  47.  
  48.             foreach (DataRow row in this._dataTable.Rows)
  49.             {
  50.                 for (int i = 0; i < columns; i++)
  51.                 {
  52.                     Label lblColumn = new Label();
  53.                     lblColumn.AutoSize = true;
  54.                     lblColumn.Text = row[i].ToString();
  55.                     lblColumn.BackColor = Color.Transparent;
  56.                     lblColumn.Padding = new System.Windows.Forms.Padding(5);
  57.                     _tlp.Controls.Add(lblColumn, i, idxRow);
  58.                 }
  59.  
  60.                 idxRow++;
  61.                 this.Controls.Add(_tlp);
  62.             }
  63.             _tlp.Visible = true;
  64.             this.AutoScroll = true;
  65.         }
  66.     }
  67. }

Form Load

  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3.     DataTable empTable = new DataTable();
  4.     empTable.Columns.Add("EmployeeId");
  5.     empTable.Columns.Add("FirstName");
  6.     empTable.Columns.Add("LastName");
  7.     empTable.Columns.Add("Email");
  8.  
  9.     empTable.Rows.Add("1", "John", "Smith", "j.smith@mail.com");
  10.     empTable.Rows.Add("2", "Ted", "Baker", "t.baker@mail.com");
  11.     empTable.Rows.Add("3", "Suzan", "Smith", "s.smith@mail.com");
  12.     empTable.Rows.Add("4", "Larry", "Jones", "l.jones@mail.com");
  13.     empTable.Rows.Add("5", "Linda", "Baker", "l.baker@mail.com");
  14.  
  15.     DataList list = new DataList();
  16.     list.DataTable = empTable;
  17.     list.AutoSize = true;
  18.     list.Bind();
  19.  
  20.     this.Controls.Add(list);
  21. }

No comments:

Post a Comment