Hi,
I have a textbox itemtemplate in my webdatagrid which needs to be associated with HtmlGenericControl. Please refer my code below.
I get an exception on this line - container.Controls.Add(divText); - Unable to cast object of type 'System.Web.UI.HtmlControls.HtmlGenericControl' to type 'Infragistics.Web.UI.TemplateContainer'.
Please suggest me.
Will be really helpful if you could provide a sample in C# code behind to build my template text box associated with HtmlGenericControl.
Awaiting your support asap.
TemplateDataField WeightChange = new TemplateDataField(); WeightChange.ItemTemplate = new CustomItemTemplate(Item,MemberWeightChange,WeightRequiredErrorText(),WeightRangeErrorText(),WeightNumberOfDecimals(),Editable, EscapeSpecialChars(Session, OnChangeFunction)); WeightChange.Key = MemberWeightChange; WeightChange.Header.Text = WeightText();WeightChange.Width = Unit.Pixel(75); if (Webdatagrid1.Columns.Count < 11) this.Webdatagrid1.Columns.Add(WeightChange);
private class CustomItemTemplate : ITemplate { ListItemType templateType; string validatorRequiredId; string validatorRangeId; string txtId; string errorRequiredMessage; string errorRangeMessage; int iNumWeightDecimals; bool bEditable; string sEnableSaveCall;
public CustomItemTemplate(ListItemType type, string sColumnName, string sWeightRequiredErrorMsg, string sWeightNotDoubleErrorMsg, int iNumWeightDecimals, bool bEditable, string sEnableSaveCall) {templateType = type;validatorRequiredId = sColumnName + "RequiredValidator";validatorRangeId = sColumnName + "RangeValidator";txtId = sColumnName + "Text";errorRequiredMessage = sWeightRequiredErrorMsg;errorRangeMessage = sWeightNotDoubleErrorMsg;iNumWeightDecimals = iNumWeightDecimals;bEditable = bEditable;sEnableSaveCall = sEnableSaveCall; }
void ITemplate.InstantiateIn(Control container) { switch (m_templateType) { case ListItemType.Item: #region
HtmlGenericControl divText = new HtmlGenericControl();
divText.TagName = "div"; TextBox txtItem = new TextBox(); txtItem.ID = m_txtId; txtItem.Width = Unit.Percentage(80); txtItem.EnableViewState = false; txtItem.Enabled = m_bEditable; txtItem.DataBinding += new EventHandler(txtItem_DataBinding); divText.Controls.Add(txtItem);container.Controls.Add(divText);
HtmlGenericControl divValidator = new HtmlGenericControl(); divValidator.TagName = "div";RequiredFieldValidator rfv = new RequiredFieldValidator(); rfv.ID = m_validatorRequiredId; rfv.Display = ValidatorDisplay.Dynamic; rfv.EnableViewState = false; rfv.ErrorMessage = m_errorRequiredMessage; rfv.SetFocusOnError = true; divValidator.Controls.Add(rfv);RangeValidator rv = new RangeValidator(); rv.ID = m_validatorRangeId; rv.Display = ValidatorDisplay.Dynamic; rv.EnableViewState = false; rv.ErrorMessage = m_errorRangeMessage; rv.SetFocusOnError = true; rv.Type = ValidationDataType.Double; divValidator.Controls.Add(rv);container.Controls.Add(divValidator); break; #endregion default: break; } }
void txtItem_DataBinding(object sender, EventArgs e) { TextBox txt = sender as TextBox;
var item = ((TemplateContainer)((TextBox)sender).Parent); var row = (GridRecordItem)item.Item; var record = (GridRecord)row.Row; var newValue = ((TextBox)sender).Text;
if (newValue != null) { NumberFormatInfo nfi = new NumberFormatInfo(); nfi.NumberDecimalDigits = m_iNumWeightDecimals; nfi.NumberGroupSeparator = string.Empty; txt.Text = Convert.ToDouble(txt.Text).ToString("N", nfi); }RequiredFieldValidator rfv = txt.NamingContainer.FindControl(m_validatorRequiredId) as RequiredFieldValidator; string rfvClientId = string.Empty; if (rfv != null) { rfv.ControlToValidate = txt.ID; rfvClientId = rfv.ClientID; } // set the control to validate into the range validator RangeValidator rv = txt.NamingContainer.FindControl(m_validatorRangeId) as RangeValidator; string rvClientId = string.Empty; if (rv != null) { rv.ControlToValidate = txt.ID; rvClientId = rv.ClientID; }txt.Attributes.Add(OnChange, "UpdateCompositeElementWeightOnChange('"+ txt.NamingContainer.NamingContainer.ClientID + "', '"+ txt.TabIndex + "', '"+ rfvClientId + "', '"+ rvClientId + "', '"+ MemberItemId + "', '"+ MemberWeightChange + "', '"+ m_iNumWeightDecimals + "', '" + m_sEnableSaveCall + "');"); txt.Attributes.Add(OnClick, "return false;"); } }
Any inputs pls???
Hello,
It has been some time since your post, however in case you still need assistance I would be glad to help.
Below you will find a sample that is showing how to implement CustomTemplate serve-side.
I hope you will benefit from the sample.
Code snippet:
public class CustomTemplate : ITemplate{ public void InstantiateIn(Control container) { WebDropDown wdd = new WebDropDown(); wdd.ID = "WebDropDown1"; wdd.Width = Unit.Pixel(200); wdd.Items.Add(new DropDownItem("1", "1")); wdd.Items.Add(new DropDownItem("2", "2")); wdd.Items.Add(new DropDownItem("3", "3"));
wdd.ClientEvents.SelectionChanged = "ctl00_WebDropDown1_SelectionChanged";
Button btn = new Button(); btn.Text = "Do postback"; btn.Click += btn_Click; //btn.OnClientClick = "alert('TEST');"; int index = ((Infragistics.Web.UI.GridControls.GridRecordItem)(((Infragistics.Web.UI.TemplateContainer)(container)).Item)).Row.Index; container.Controls.Add(btn);
container.Controls.Add(wdd); }
protected void btn_Click(object sender, EventArgs e) { var temp = 0; }}