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 FormattedTemplate : System.Web.UI.ITemplate, INamingContainer { System.Web.UI.WebControls.ListItemType _type; DataColumn _dc; public FormattedTemplate(System.Web.UI.WebControls.ListItemType type, DataColumn dc) { _type = type; _dc = dc; } public void InstantiateIn(System.Web.UI.Control container) { TextBox txt = null; Label lbl = null; RegularExpressionValidator rexpval = null; RangeValidator rangeVal = null; switch (_type) { case System.Web.UI.WebControls.ListItemType.Item: switch (_dc.DataType.ToString()) { 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; container.Controls.Add(txt); txt.MaxLength = 19; txt.Width = Unit.Pixel(60); rexpval = new RegularExpressionValidator(); rexpval.ValidationGroup = rexpval.ClientID + "_group"; 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; container.Controls.Add(rexpval); //I am adding this segment only as a demonstration of the use of Validation //Group to specify the target of the validating in case there were several //controls rendered on the GridView that would require validation. Button btnValidate = new Button(); container.Controls.Add(btnValidate); btnValidate.Text = "Validate"; btnValidate.ValidationGroup = rexpval.ClientID + "_group"; txt.DataBinding += new EventHandler(txt_DataBinding); break; default: //if datacolumn is readonly and unique then it is a primary key //render it as label a distinctive style lbl = new Label(); 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(); container.Controls.Add(lbl); lbl.DataBinding += new EventHandler(lbl_DataBinding); break; } break; case System.Web.UI.WebControls.ListItemType.EditItem: if (_dc.ReadOnly || (_dc.ReadOnly && _dc.Unique)) { lbl = new Label(); 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"; container.Controls.Add(lbl); lbl.DataBinding += new EventHandler(lbl_DataBinding); } else { switch (_dc.DataType.ToString()) { case "System.Boolean": RadioButtonList rbl = new RadioButtonList(); System.Web.UI.WebControls.ListItem li = new System.Web.UI.WebControls.ListItem("Yes", "True"); rbl.Items.Add(li); li = new System.Web.UI.WebControls.ListItem("No", "False"); rbl.Items.Add(li); rbl.DataBound += new EventHandler(rbl_DataBound); container.Controls.Add(rbl); break; case "System.String": txt = new TextBox(); txt.MaxLength = _dc.MaxLength; txt.Width = Unit.Pixel(_dc.MaxLength * 6); container.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; container.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; container.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; container.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; container.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; container.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; container.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; container.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; container.Controls.Add(rexpval); txt.DataBinding += new EventHandler(txt_DataBinding); break; case "System.DateTime": txt = new TextBox(); txt.ID = "txt" + _dc.ColumnName; txt.MaxLength = 10; txt.Width = Unit.Pixel(80); container.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"; container.Controls.Add(rexpval); txt.DataBinding += new EventHandler(txt_DataBinding); break; default: txt = new TextBox(); txt.ID = "txt" + _dc.ColumnName; container.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; } } void txt_DataBinding(object sender, EventArgs e) { TextBox txt = (TextBox)sender; DataRowView drv = null; if (txt.NamingContainer is GridViewRow) { drv = (DataRowView)((GridViewRow)txt.NamingContainer).DataItem; } else if (txt.NamingContainer is FormView) { 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; if (rbl.NamingContainer is GridViewRow) { drv = (DataRowView)((GridViewRow)rbl.NamingContainer).DataItem; } else if (rbl.NamingContainer is FormView) { 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; if (lbl.NamingContainer is GridViewRow) { drv = (DataRowView)((GridViewRow)lbl.NamingContainer).DataItem; } else if (lbl.NamingContainer is FormView) { drv = (DataRowView)((FormView)lbl.NamingContainer).DataItem; } //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; } } } } }