rbMatrix Control UI Code Behind Example

The following is the code-behind for the rbMatrix control demo.  

See also these related links:

  1. View the usercontrol markup for this example
  2. View the live example of rbMatrix for ASP.NET
  3. Purchase rbMatrix for ASP.NET 
using System;
using System.Collections.Generic;
using System.Text;
using rbTools.rbMatrix;

namespace BirdwellMusic.Umbraco.UserControls.rbMatrix
{

    public partial class rbMatrixDemo : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            // clear the messages each pass...
            this.ctrlValidationErrorList.Visible = false;
            this.feedbackLabel.Text = "";

            if (this.IsPostBack == false)
            {
                // Page initialization...
                InitMatrix();
            }
            else
            {
                // Page being postbacked...
                MatrixControl1.Update();
                ShowDiagnostics(null);

                RefreshOptions();
            }
        }

        private void RefreshOptions()
        {
            // set or re-set common UI settings...
            MatrixControl1.EnableHeader = this.ctrlEnableHeaderCheckBox.Checked;
            MatrixControl1.EnableFooter = this.ctrlEnableFooterCheckBox.Checked;
            MatrixControl1.EnableTotals = this.ctrlEnableFooterTotalsCheckBox.Checked;
            MatrixControl1.EnableRowCountColumn = this.ctrlEnableRowCountCheckBox.Checked;
            MatrixControl1.EnableSelectCheckBoxColumn = this.ctrlEnableCheckColumnCheckBox.Checked;
            MatrixControl1.EnableLeftSideActionsColumn = this.ctrlEnableLeftActionsColumnCheckBox.Checked;
            MatrixControl1.EnableRightSideActionsColumn = this.ctrlEnableRightActionsColumnCheckBox.Checked;
        }

        private void InitMatrix()
        {
            // Define the columns for the matrix and various properties, validation, 
            // and (optionally) the initial row cell data...
            MatrixColumnDataCollection matrixColumnDefinitions = new MatrixColumnDataCollection();

            ////////////////////////////////////////////////////////////
            MatrixColumnDataItem matrixColumn1 = new MatrixColumnDataItem("Full Name");
            matrixColumn1.DefaultValue = "";

            MatrixControlTemplate matrixTemplate1 = new MatrixControlTemplate();
            matrixTemplate1.MatrixControlType = MatrixControlType.TextBox;
            matrixTemplate1.AutoPostBackOnTextChange = false;
            matrixTemplate1.CssClass = "matrixtext";
            matrixTemplate1.TooltipText = "Full Name (e.g., Jane Doe)";
            matrixTemplate1.Width = 125;
            matrixColumn1.ControlTemplate = matrixTemplate1;

            Validations matrixColumn1Validation = new Validations();
            matrixColumn1Validation.IsRequiredEntry = true;
            matrixColumn1.Validations = matrixColumn1Validation;

            matrixColumnDefinitions.Add(matrixColumn1);

            ////////////////////////////////////////////////////////////
            MatrixColumnDataItem matrixColumn2 = new MatrixColumnDataItem("Email");
            matrixColumn2.DefaultValue = "";
            matrixColumn2.TransformTextOption = MatrixCellTransformTextOption.LowerCase;

            MatrixControlTemplate matrixTemplate2 = new MatrixControlTemplate();
            matrixTemplate2.MatrixControlType = MatrixControlType.TextBox;
            matrixTemplate2.AutoPostBackOnTextChange = false;
            matrixTemplate2.CssClass = "matrixlowertext";
            matrixTemplate2.TooltipText = "Email (e.g., someone@someplace.com)";
            matrixTemplate2.Width = 175;

            matrixColumn2.ControlTemplate = matrixTemplate2;
            Validations matrixColumn2Validation = new Validations();
            matrixColumn2Validation.IsRequiredEntry = true;
            matrixColumn2Validation.IsRegExMatch = true;
            matrixColumn2Validation.RequiredRegExMatch = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";

            matrixColumn2.Validations = matrixColumn2Validation;

            matrixColumnDefinitions.Add(matrixColumn2);
            ////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////
            MatrixColumnDataItem matrixColumn3 = new MatrixColumnDataItem("Favorite Color");
            matrixColumn3.DefaultValue = "";

            MatrixControlTemplate matrixControl3 = new MatrixControlTemplate();
            matrixControl3.Width = 150;
            matrixControl3.MatrixControlType = MatrixControlType.DropDownList;

            matrixControl3.AddListValues("[Select]", "");
            matrixControl3.ListDataSourceDisplayName = "DisplayColor";
            matrixControl3.ListDataSourceValueName = "ValueColor";
            matrixControl3.ListDataSource = this.ColorsSampleData;
            matrixControl3.TooltipText = "Select a color from the list.";

            matrixControl3.AutoPostBackOnTextChange = false;
            matrixControl3.CssClass = "matrixlist";

            Validations matrixColumn3Validation = new Validations();
            matrixColumn3Validation.IsRequiredEntry = true;
            matrixColumn3.Validations = matrixColumn3Validation;

            matrixColumn3.ControlTemplate = matrixControl3;

            matrixColumnDefinitions.Add(matrixColumn3);
            ////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////
            MatrixColumnDataItem matrixColumn4 = new MatrixColumnDataItem("Student");
            matrixColumn4.DefaultValue = "";

            MatrixControlTemplate matrixControl4 = new MatrixControlTemplate();
            matrixControl4.Width = 75;
            matrixControl4.MatrixControlType = MatrixControlType.CheckBox;
            matrixControl4.CheckBoxText = "";
            matrixControl4.TooltipText = "Is individual currently a student?";
            matrixControl4.CssClass = "matrixcheck";
            matrixControl4.BoolFalseText = "No";
            matrixControl4.BoolTrueText = "Yes";

            matrixColumn4.ControlTemplate = matrixControl4;

            matrixColumnDefinitions.Add(matrixColumn4);
            ////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////
            MatrixColumnDataItem matrixColumn5 = new MatrixColumnDataItem("Age");
            matrixColumn5.DefaultValue = "";
            matrixColumn5.RowCellDataType = typeof(decimal);
            matrixColumn5.ColumnAggregationAction = MatrixColumnAggregation.StandardDeviation;
            matrixColumn5.TreatNULLNumericValuesAsZero = true;
            matrixColumn5.ReadOnly = true;

            Validations matrixColumn5Validation = new Validations();
            matrixColumn5Validation.IsPositiveNumber = true;
            matrixColumn5Validation.IsNumberMin = true;
            matrixColumn5Validation.IsNumberMax = true;
            matrixColumn5Validation.RequiredNumberMin = 0;
            matrixColumn5Validation.RequiredNumberMax = 200;
            matrixColumn5Validation.IsRequiredEntry = true;

            matrixColumn5.Validations = matrixColumn5Validation;

            MatrixControlTemplate matrixControlTemplate5 = new MatrixControlTemplate();
            matrixControlTemplate5.Width = 65;
            matrixControlTemplate5.MatrixControlType = MatrixControlType.TextBox;
            matrixControlTemplate5.TooltipText = "How old is this individual";
            matrixControlTemplate5.CssClass = ""; 
            matrixControlTemplate5.DisplayTextFormatString = "{0:0.00}"; 

            matrixColumn5.ControlTemplate = matrixControlTemplate5;

            matrixColumnDefinitions.Add(matrixColumn5);
            ////////////////////////////////////////////////////////////

            MatrixColumnDataItem matrixColumn6 = new MatrixColumnDataItem("Birthday");
            matrixColumn6.DefaultValue = "";
            matrixColumn6.RowCellDataType = typeof(DateTime);

            Validations matrixColumn6Validation = new Validations();
            matrixColumn6Validation.IsRequiredEntry = true;
            matrixColumn6Validation.IsDate = true;
            matrixColumn6Validation.IsDateOnOrBefore = true;
            matrixColumn6Validation.IsDateOnOrAfter = true;
            matrixColumn6Validation.RequiredDateOnOrAfter = new DateTime(1850, 1, 1);
            matrixColumn6Validation.RequiredDateOnOrBefore = new DateTime(2199, 1, 1);

            matrixColumn6.Validations = matrixColumn6Validation;

            MatrixControlTemplate matrixControlTemplate6 = new MatrixControlTemplate();
            matrixControlTemplate6.Width = 75;
            matrixControlTemplate6.MatrixControlType = MatrixControlType.TextBox;
            matrixControlTemplate6.TooltipText = "When was this person born (must be between 1850 and 2199).";
            matrixControlTemplate6.CssClass = ""; 
            matrixControlTemplate6.DisplayTextFormatString = "{0:M/d/yyyy}"; 

            matrixColumn6.ControlTemplate = matrixControlTemplate6;

            matrixColumnDefinitions.Add(matrixColumn6);
            ////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////
            // If we want to seed the matrix with cell data, we do that here.
            MatrixRowDataCollection matrixInitialRowData = new MatrixRowDataCollection();

            float rbAge = (((float)(new TimeSpan(DateTime.Now.Ticks - Convert.ToDateTime("1/16/1984").Ticks).TotalDays)) / 365.25F);
            float cbAge = (((float)(new TimeSpan(DateTime.Now.Ticks - Convert.ToDateTime("7/18/1917").Ticks).TotalDays)) / 365.25F);
            float lbAge = (((float)(new TimeSpan(DateTime.Now.Ticks - Convert.ToDateTime("3/29/1977").Ticks).TotalDays)) / 365.25F);
            float mbAge = (((float)(new TimeSpan(DateTime.Now.Ticks - Convert.ToDateTime("6/1/1996").Ticks).TotalDays)) / 365.25F);
            float fbAge = (((float)(new TimeSpan(DateTime.Now.Ticks - Convert.ToDateTime("9/1/1950").Ticks).TotalDays)) / 365.25F);

            matrixInitialRowData.Add(new MatrixRowDataItem(new object[] { "Joe User", "joe@somedomain.com", "#FF0000", "False", rbAge, Convert.ToDateTime("1/16/1984") }, false));
            matrixInitialRowData.Add(new MatrixRowDataItem(new object[] { "Cindy User", "cindy@somedomain.com", "#00FF00", "False", cbAge, Convert.ToDateTime("7/18/1917") }, false));
            matrixInitialRowData.Add(new MatrixRowDataItem(new object[] { "Peter User", "peter@somedomain.com", "#0000FF", "True", lbAge, Convert.ToDateTime("3/29/1977") }, false));
            matrixInitialRowData.Add(new MatrixRowDataItem(new object[] { "Zell User", "zell@somedomain.com", "#00FF00", "True", mbAge, Convert.ToDateTime("6/1/1996") }, false));
            matrixInitialRowData.Add(new MatrixRowDataItem(new object[] { "Pat User", "pat@somedomain.com", "#0000FF", "True", fbAge, Convert.ToDateTime("9/1/1950") }, false));

            matrixColumnDefinitions.RowData = matrixInitialRowData;

            ////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////
            // Bind the column data and (optionally) set up rows for display...
            MatrixControl1.DataSource = matrixColumnDefinitions;
            MatrixControl1.DataBind();
            ////////////////////////////////////////////////////////////

            MatrixControl1.SetFocusToFirstDataInputControl(0);
        }

        protected void MatrixControl1_Init(object sender, EventArgs e)
        {
            // Wire up events here...
            MatrixControl1.OnMatrixDataChanged += new OnMatrixDataChanged(MatrixControl1_OnMatrixDataChanged);
        }

        protected void MatrixControl1_OnMatrixDataChanged(MatrixDataChangedArgs e)
        {
            this.feedbackLabel.Text = "Unsaved Changes Pending";
        }

        protected void ShowDiagnostics(MatrixDataChangedArgs e)
        {
            string matrixDiagnostics = "";

            if (e != null)
            {
                StringBuilder sb = new StringBuilder();

                sb.AppendLine("==== CHANGE DATA ====");
                sb.AppendLine(e.ToString());
                sb.AppendLine("=====================");

                matrixDiagnostics = MatrixControl1.GetDiagnostics(Environment.NewLine);
                sb.AppendLine(matrixDiagnostics);

                this.ctrlMatrixDiagnosticsTextBox.Text = sb.ToString();

            }
            else
            {
                matrixDiagnostics = MatrixControl1.GetDiagnostics(Environment.NewLine);
                this.ctrlMatrixDiagnosticsTextBox.Text = matrixDiagnostics;
            }
        }

        protected void ctrlTestPostBackBtn_Click(object sender, EventArgs e)
        {
            if (ValidateMatrixInputs() == false)
            {
                this.feedbackLabel.Text = "Data is not completely valid.  You would likely not save this matrix data.";
            }
            else
            {
                this.feedbackLabel.Text = "Success!  Data was validated.  You would likely save this matrix data.";
            }

            ShowDiagnostics(null);
        }

        protected void OnMatrixOptionChanged(object sender, EventArgs e)
        {
            MatrixControl1.Update();
            ShowDiagnostics(null);
        }

        protected bool ValidateMatrixInputs()
        {
            // Clear previous hightlights, if any...
            MatrixControl1.Update();

            int rows = MatrixControl1.MatrixData.RowDataCount;
            int cols = MatrixControl1.MatrixData.Columns.Count;

            List<string> validationMessages;
            List<string> validationMessagesAll = new List<string>();

            for (int r = 0; r < rows; r++)
            {
                for (int c = 0; c < cols; c++)
                {
                    if (MatrixControl1.Validate(r, c, out validationMessages) == false)
                    {
                        MatrixControl1.HighlightCell(r, c, System.Drawing.Color.Salmon);

                        foreach (string validationMsg in validationMessages)
                        {
                            if (validationMessagesAll.Contains(validationMsg) == false)
                            {
                                validationMessagesAll.Add(validationMsg);
                            }
                        }
                    }
                }
            }

            bool isValid = true;

            if (validationMessagesAll.Count > 0)
            {
                ctrlValidationErrorList.Visible = true;
                ctrlValidationErrorList.DataSource = validationMessagesAll;
                ctrlValidationErrorList.DataBind();

                isValid = false;
            }
            else
            {
                ctrlValidationErrorList.Visible = false;
            }

            return isValid;

        }

        protected void ctrlToggleDiagnosticsLink_Click(object sender, EventArgs e)
        {
            if (this.ctrlToggleDiagnosticsLink.Text == "Show Diagnostics and Options")
            {
                this.ctrlDiagnosticPanel.Visible = true;
                this.ctrlToggleDiagnosticsLink.Text = "Hide Diagnostics and Options";
            }
            else
            {
                this.ctrlDiagnosticPanel.Visible = false;
                this.ctrlToggleDiagnosticsLink.Text = "Show Diagnostics and Options";
            }
        }

        [Serializable]
        protected class ColorSampleItem
        {
            public ColorSampleItem(string displayColor, string valueColor)
            {
                this.DisplayColor = displayColor;
                this.ValueColor = valueColor;
            }

            public string DisplayColor { get; set; }
            public string ValueColor { get; set; }
        }

        protected List<ColorSampleItem> ColorsSampleData
        {
            get
            {
                List<ColorSampleItem> data = new List<ColorSampleItem>();

                data.Add(new ColorSampleItem("Red", "#FF0000"));
                data.Add(new ColorSampleItem("Green", "#00FF00"));
                data.Add(new ColorSampleItem("Blue", "#0000FF"));

                return data;
            }
        }
    }
}