This is a migrated thread and some comments may be shown as answers.

Problems getting controls after postback

1 Answer 94 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Somnath
Top achievements
Rank 1
Somnath asked on 02 Jan 2012, 06:25 AM
 Hi,

I am adding controls dynamically in OnItemCreated event.
OnitemDataBound setting the value to same controls on the basis of hidden field present in same row.

This works fine.

But after button click event which is at the bottom page  I am getting same value.
the problem is ,in OnItemCreated controls are getting created  again.
But if i checked for already added controls its showing null.

Can you please suggest.
My code is as below.

protected void OnItemCreated(object sender, GridItemEventArgs e)
        {
            if (!IsPostBack)
            {
                RadGrid rg = (RadGrid)sender;
 
                SQWParameter oSQWParameter = (SQWParameter)ViewState["oParameter"];
 
                if (e.Item is GridDataItem)
                {
                    GridDataItem item = e.Item as GridDataItem;
                    HiddenField hdnValue = (HiddenField)e.Item.FindControl("hdnId");
                    WebControl rwControl = GetContorlByParameter(oSQWParameter);
                    item["Column2"].Controls.Add(rwControl);
                }
 
            }
        }
 
private WebControl GetContorlByParameter(SQWParameter oSQWParameter)
        {
            RadTextBox txtValue = new RadTextBox();
            RadNumericTextBox ntxtValue = new RadNumericTextBox();
            RadComboBox cmbValue = new RadComboBox();
            RadDatePicker rdpValue = new RadDatePicker();
 
            int iControlType = 0;
            int iValue = 0;
 
 
            switch (oSQWParameter.Type)
            {
                case ParameterType.Text:
                    switch (oSQWParameter.ValueType)
                    {
                        case ParameterValueType.UniqueValue:
                            iControlType = 0;
                            txtValue = new RadTextBox();
                            txtValue.ID = "rwControlValue";
                            txtValue.Text = oSQWParameter.DefaultValue.ToString();
                            txtValue.EmptyMessage = oSQWParameter.DefaultValue.ToString();
                            txtValue.Width = 120;
                            break;
                        case ParameterValueType.ValueList:
                            iControlType = 2;
                            cmbValue = new RadComboBox();
                            cmbValue.ID = "rwControlValue";
                            cmbValue.Width = 110;
                            cmbValue.Items.AddRange(GetValueListItems(oSQWParameter.ValueList));
                            break;
 
                    }
                    break;
                case ParameterType.Numeric:
                    switch (oSQWParameter.ValueType)
                    {
                        case ParameterValueType.UniqueValue:
                            iControlType = 1;
                            ntxtValue = new RadNumericTextBox();
                            ntxtValue.ID = "rwControlValue";
                            txtValue.Width = 120;
                            ntxtValue.NumberFormat.DecimalDigits = oSQWParameter.DecimalPlaces;
                            if (!oSQWParameter.Use1000Separator)
                                ntxtValue.NumberFormat.GroupSeparator = "";
                            ntxtValue.EmptyMessage = oSQWParameter.DefaultValue.ToString();
                            break;
                        case ParameterValueType.ValueList:
                            iControlType = 2;
                            cmbValue = new RadComboBox();
                            cmbValue.ID = "rwControlValue";
                            cmbValue.Width = 110;
                            cmbValue.Items.AddRange(GetValueListItems(oSQWParameter.ValueList));
                            break;
 
                    }
                    break;
                case ParameterType.Date:
                    switch (oSQWParameter.ValueType)
                    {
                        case ParameterValueType.UniqueValue:
                            iControlType = 3;
                            rdpValue = new RadDatePicker();
                            rdpValue.ID = "rwControlValue";
                            rdpValue.Width = 120;
                            rdpValue.MinDate = new DateTime(1900, 1, 1, 12, 00, 00);
                            rdpValue.DateInput.DateFormat = "MM/dd/yyyy";
                            DateTime dtValue = (DateTime)oSQWParameter.DefaultValue;
                            rdpValue.DateInput.EmptyMessage = dtValue.ToString("MM/dd/yyyy");
                            break;
                    }
                    break;
            }
 
            if (iControlType == 0)
                return txtValue;
            else if (iControlType == 1)
                return ntxtValue;
            else if (iControlType == 2)
                return cmbValue;
            else
                return rdpValue;
 
        }
 
  protected void OnItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem)
            {
                GridDataItem item = e.Item as GridDataItem;
 
                HiddenField hdnValue = (HiddenField)e.Item.FindControl("hdnValue");           
                 
                 RadTextBox rwControl = (RadTextBox)e.Item.FindControl("ntxtValue");
                  rwControl.Text = hdnValue.Value;
                             
            }
        }

1 Answer, 1 is accepted

Sort by
0
Accepted
Jayesh Goyani
Top achievements
Rank 2
answered on 04 Jan 2012, 04:01 PM
Hello Ankit,

Please remove below condition from your code.
if (!IsPostBack)

Because dynamically added control needs to added every time. (After the page post back also)

Thanks,
Jayesh Goyani
Tags
Grid
Asked by
Somnath
Top achievements
Rank 1
Answers by
Jayesh Goyani
Top achievements
Rank 2
Share this question
or