WEBSWAPP Silverlight ASP.NET 3.5 ASP.NET 2.0 ASP.NET 1.0
Cascading Lists
ITemplate
DDL in GridView
G/V MultiSelect
Nested GridViews
RegExp
DataGrid Reorder
Events fire twice
Hyperlink Field
TextBox
UpdateParameters
MultiView
TreeView
Introdcution FormView GridView
    
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; namespace WEBSWAPP.Website.CodeSamples.ASPNET2.ITemplate { public class FormattedTemplate2 : System.Web.UI.ITemplate, INamingContainer { System.Web.UI.WebControls.ListItemType _type; DataColumnCollection _dccol; private System.Collections.Hashtable Fields; public bool ShowEdit = false; public FormattedTemplate2(System.Web.UI.WebControls.ListItemType type, DataColumnCollection dccol, bool showEdit) { _type = type; _dccol = dccol; ShowEdit = showEdit; } public void InstantiateIn(System.Web.UI.Control container) { Fields = new System.Collections.Hashtable(); //create a table within the ItemTemplate Table tbl = new Table(); TableRow tr = null; TableCell td = null; container.Controls.Add(tbl); foreach (DataColumn dc in _dccol) { if (dc.ColumnName != null) { //for each DataColum create a TableRow with 2 cells tr = new TableRow(); tbl.Rows.Add(tr); td = new TableCell(); tr.Cells.Add(td); td.Text = FormatHeader(dc.ColumnName); td.CssClass = "FormViewLabel1"; td = new TableCell(); tr.Cells.Add(td); SetAColumn(td, dc); } } //if ShowEdit is set to true add a LinkButton for Edit within the ItemTemplate //and 2 linkButons (Update, Cancel) for the EditItemTemplate tr = new TableRow(); tbl.Rows.Add(tr); td = new TableCell(); tr.Cells.Add(td); if (_type == System.Web.UI.WebControls.ListItemType.Item) { td.ColumnSpan = 2; LinkButton lnkEdit = new LinkButton(); lnkEdit.Text = "Edit"; lnkEdit.ToolTip = "Click here to turn on the EditItemTemplate of the FormView"; lnkEdit.CommandName = "Edit"; td.Controls.Add(lnkEdit); } else { LinkButton lnkButton = new LinkButton(); lnkButton.Text = "Cancel"; lnkButton.ToolTip = "Click here to cancel the Edit process"; lnkButton.CommandName = "Cancel"; td.Controls.Add(lnkButton); td = new TableCell(); tr.Cells.Add(td); lnkButton = new LinkButton(); lnkButton.Text = "Update"; lnkButton.ToolTip = "Click here to update the record"; lnkButton.CommandName = "Update"; td.Controls.Add(lnkButton); } // } private string FormatHeader(string inputString) { string ret = null; foreach (char c in inputString) { if (c < 'a') ret += " " + c; else ret += c; } return ret; } private Control SetAColumn(TableCell td, DataColumn _dc) { TextBox txt = null; Label lbl = null; RegularExpressionValidator rexpval = null; RangeValidator rangeVal = null; switch (_type) { case System.Web.UI.WebControls.ListItemType.Item: //if datacolumn is readonly and unique then it is a primary key //render it as label a distinctive style lbl = new Label(); lbl.ID = "lbl" + _dc.ColumnName; Fields.Add(lbl.ID, _dc.ColumnName); if (_dc.ReadOnly && _dc.Unique) { lbl.CssClass = "PrimaryKeyCell"; } //compose a tooltip from the column attributes lbl.ToolTip = _dc.ColumnName + " is of type " + _dc.DataType.ToString(); if (_dc.ReadOnly) lbl.ToolTip += ", Readonly"; if (_dc.Unique) lbl.ToolTip += ", Unique"; if (_dc.DefaultValue.Equals(DBNull.Value)) lbl.ToolTip += ", Default value is DBNull"; if (!_dc.Expression.Equals(string.Empty)) lbl.ToolTip += ", a calculated field based on " + _dc.Expression.ToString(); td.Controls.Add(lbl); lbl.DataBinding += new EventHandler(lbl_DataBinding); break; case System.Web.UI.WebControls.ListItemType.EditItem: if (_dc.ReadOnly || (_dc.ReadOnly && _dc.Unique)) { lbl = new Label(); lbl.ID = "lbl" + _dc.ColumnName; Fields.Add(lbl.ID, _dc.ColumnName); lbl.CssClass = "PrimaryKeyCell"; //compose a tooltip from the column attributes lbl.ToolTip = _dc.ColumnName + " is of type " + _dc.DataType.ToString(); if (_dc.ReadOnly) lbl.ToolTip += ", Readonly"; if (_dc.Unique) lbl.ToolTip += ", Unique"; if (_dc.DefaultValue.Equals(DBNull.Value)) lbl.ToolTip += ", Default value is DBNull"; td.Controls.Add(lbl); lbl.DataBinding += new EventHandler(lbl_DataBinding); } else { switch (_dc.DataType.ToString()) { case "System.Boolean": RadioButtonList rbl = new RadioButtonList(); rbl.ID = "rbl" + _dc.ColumnName; Fields.Add(rbl.ID, _dc.ColumnName); System.Web.UI.WebControls.ListItem li = new System.Web.UI.WebControls.ListItem("Yes", "True"); rbl.Items.Add(li); rbl.RepeatLayout = RepeatLayout.Flow; rbl.RepeatDirection = RepeatDirection.Horizontal; li = new System.Web.UI.WebControls.ListItem("No", "False"); rbl.Items.Add(li); rbl.DataBound += new EventHandler(rbl_DataBound); td.Controls.Add(rbl); break; case "System.String": txt = new TextBox(); txt.ID = "txt" + _dc.ColumnName; Fields.Add(txt.ID, _dc.ColumnName); txt.MaxLength = _dc.MaxLength; txt.Width = Unit.Pixel(_dc.MaxLength * 6); td.Controls.Add(txt); txt.DataBinding += new EventHandler(txt_DataBinding); break; case "System.Int16": txt = new TextBox(); if (_dc.DefaultValue.Equals(DBNull.Value)) txt.ToolTip = _dc.ColumnName + " is of type " + _dc.DataType.ToString(); if (!_dc.Expression.Equals(string.Empty)) txt.ToolTip += ", a calculated field based on " + _dc.Expression.ToString(); txt.ID = "txt" + _dc.ColumnName; Fields.Add(txt.ID, _dc.ColumnName); td.Controls.Add(txt); txt.MaxLength = 5; txt.Width = Unit.Pixel(40); rangeVal = new RangeValidator(); rangeVal.ControlToValidate = txt.ID; rangeVal.MaximumValue = "32767"; rangeVal.MinimumValue = "-32767"; rangeVal.Display = ValidatorDisplay.Dynamic; rangeVal.Text = "*"; rangeVal.ErrorMessage = "Entered value for " + _dc.ColumnName + " is not valid for an int16 type"; rangeVal.Type = ValidationDataType.Integer; td.Controls.Add(rangeVal); txt.DataBinding += new EventHandler(txt_DataBinding); break; case "System.Int32": txt = new TextBox(); if (_dc.DefaultValue.Equals(DBNull.Value)) txt.ToolTip = _dc.ColumnName + " is of type " + _dc.DataType.ToString(); if (!_dc.Expression.Equals(string.Empty)) txt.ToolTip += ", a calculated field based on " + _dc.Expression.ToString(); txt.ID = "txt" + _dc.ColumnName; Fields.Add(txt.ID, _dc.ColumnName); td.Controls.Add(txt); txt.MaxLength = 10; txt.Width = Unit.Pixel(60); rangeVal = new RangeValidator(); rangeVal.ControlToValidate = txt.ID; rangeVal.MaximumValue = "2147483647"; rangeVal.MinimumValue = "-2147483648"; rangeVal.Display = ValidatorDisplay.Dynamic; rangeVal.Text = "*"; rangeVal.ErrorMessage = "Entered value for " + _dc.ColumnName + " is not valid for an int32 type"; rangeVal.Type = ValidationDataType.Integer; td.Controls.Add(rangeVal); txt.DataBinding += new EventHandler(txt_DataBinding); break; case "System.Int64": txt = new TextBox(); if (_dc.DefaultValue.Equals(DBNull.Value)) txt.ToolTip = _dc.ColumnName + " is of type " + _dc.DataType.ToString(); if (!_dc.Expression.Equals(string.Empty)) txt.ToolTip += ", a calculated field based on " + _dc.Expression.ToString(); txt.ID = "txt" + _dc.ColumnName; Fields.Add(txt.ID, _dc.ColumnName); td.Controls.Add(txt); txt.MaxLength = 19; txt.Width = Unit.Pixel(60); rangeVal = new RangeValidator(); rangeVal.ControlToValidate = txt.ID; rangeVal.MaximumValue = "9223372036854775807"; rangeVal.MinimumValue = "-9223372036854775808"; rangeVal.Display = ValidatorDisplay.Dynamic; rangeVal.Text = "*"; rangeVal.ErrorMessage = "Entered value for " + _dc.ColumnName + " is not valid for an int64 type"; rangeVal.Type = ValidationDataType.Integer; td.Controls.Add(rangeVal); txt.DataBinding += new EventHandler(txt_DataBinding); break; case "System.Decimal": txt = new TextBox(); if (_dc.DefaultValue.Equals(DBNull.Value)) txt.ToolTip = _dc.ColumnName + " is of type " + _dc.DataType.ToString(); if (!_dc.Expression.Equals(string.Empty)) txt.ToolTip += ", a calculated field based on " + _dc.Expression.ToString(); txt.ID = "txt" + _dc.ColumnName; Fields.Add(txt.ID, _dc.ColumnName); td.Controls.Add(txt); txt.MaxLength = 19; txt.Width = Unit.Pixel(60); rexpval = new RegularExpressionValidator(); rexpval.ValidationExpression = @"^\d*.?\d{0,2}$"; rexpval.Display = ValidatorDisplay.Dynamic; rexpval.Text = "*"; rexpval.ErrorMessage = "Entered value for " + _dc.ColumnName + " is not valid for Decimal type"; rexpval.ControlToValidate = txt.ID; td.Controls.Add(rexpval); txt.DataBinding += new EventHandler(txt_DataBinding); break; case "System.DateTime": txt = new TextBox(); txt.ID = "txt" + _dc.ColumnName; Fields.Add(txt.ID, _dc.ColumnName); txt.MaxLength = 10; txt.Width = Unit.Pixel(80); td.Controls.Add(txt); rexpval = new RegularExpressionValidator(); rexpval.ValidationExpression = @"^\(?\d{3}[\)\-\s]?\d{3}[-\s]?\d{4}$"; rexpval.ControlToValidate = txt.ID; rexpval.Display = ValidatorDisplay.Dynamic; rexpval.Text = "*"; rexpval.ErrorMessage = "Entered value for " + _dc.ColumnName + " is not a valid date entry"; td.Controls.Add(rexpval); txt.DataBinding += new EventHandler(txt_DataBinding); break; default: txt = new TextBox(); txt.ID = "txt" + _dc.ColumnName; Fields.Add(txt.ID, _dc.ColumnName); td.Controls.Add(txt); if (txt.MaxLength > 0) { txt.MaxLength = _dc.MaxLength; txt.Width = Unit.Pixel(_dc.MaxLength * 6); } txt.DataBinding += new EventHandler(txt_DataBinding); break; } } break; } return lbl; } void txt_DataBinding(object sender, EventArgs e) { TextBox txt = (TextBox)sender; DataRowView drv = null; DataColumn _dc = _dccol[Fields[txt.ID].ToString()]; drv = (DataRowView)((FormView)txt.NamingContainer).DataItem; switch (_dc.DataType.ToString()) { case "System.String": txt.Text = drv[_dc.ColumnName].ToString(); break; case "System.Int16": case "System.Int32": case "System.Int64": case "int": if (Convert.ToInt64(drv[_dc.ColumnName]) < 0) txt.CssClass = "NegativeNumber"; txt.Text = Convert.ToInt64(drv[_dc.ColumnName]).ToString("#0"); break; case "System.Decimal": if (Convert.ToDecimal(drv[_dc.ColumnName]) < 0) txt.CssClass = "NegativeNumber"; txt.Text = Convert.ToDecimal(drv[_dc.ColumnName]).ToString("#0.00"); break; case "System.DateTime": if (Convert.ToDateTime(drv[_dc.ColumnName]) > DateTime.Now) txt.CssClass = "LateDate"; txt.Text = Convert.ToDateTime(drv[_dc.ColumnName]).ToString("MM/dd/yyyy"); break; default: txt.Text = drv[_dc.ColumnName].ToString(); break; } } void rbl_DataBound(object sender, EventArgs e) { RadioButtonList rbl = ((RadioButtonList)sender); DataRowView drv = null; DataColumn _dc = _dccol[Fields[rbl.ID].ToString()]; drv = (DataRowView)((FormView)rbl.NamingContainer).DataItem; rbl.SelectedValue = drv[_dc.ColumnName].ToString(); } void lbl_DataBinding(object sender, EventArgs e) { Label lbl = ((Label)sender); DataRowView drv = null; drv = (DataRowView)((FormView)lbl.NamingContainer).DataItem; DataColumn _dc = _dccol[Fields[lbl.ID].ToString()]; //change the data format based on the data if the datacolumn is not a primary key field if (_dc.ReadOnly && _dc.Unique) { lbl.Text = drv[_dc.ColumnName].ToString(); } else { switch (_dc.DataType.ToString()) { case "System.DateTime": lbl.Text = ((DateTime)drv[_dc.ColumnName]).ToString("ddd, MMM dd, yyyy"); if ((DateTime)drv[_dc.ColumnName] > DateTime.Now) lbl.CssClass = "LateDate"; break; case "System.Decimal": lbl.Text = ((Decimal)drv[_dc.ColumnName]).ToString("#0.00"); if ((Decimal)drv[_dc.ColumnName] < 0) lbl.CssClass = "NegativeNumber"; break; case "System.Boolean": lbl.Text = Convert.ToBoolean(drv[_dc.ColumnName]) ? "Yes" : "No"; break; default: lbl.Text = drv[_dc.ColumnName].ToString(); break; } } } } }