The following is the code-behind for the rbMatrix control
demo.
See also these related links:
- View the usercontrol markup for
this example
- View the live example of rbMatrix
for ASP.NET
- 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;
}
}
}
}