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

Unable to extract values using Template columsn dyncamically created Telerik RadGRID

3 Answers 186 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Surendra
Top achievements
Rank 1
Surendra asked on 21 May 2014, 06:19 AM
 HI,
I have created one form with dynamic telerik RadGRID with template columns as shown in the exmple URL: http://www.telerik.com/help/aspnet-ajax/grid-custom-edit-forms.html. Everything works fine except Extract values function does not return any values. Please follow below code example for better understanding.

public partial class TEST : System.Web.UI.Page
{
UserDetails _CurrentUser = null;
protected void Page_Init(object sender, EventArgs e)
{
_CurrentUser = (UserDetails)HttpContext.Current.Session["UserDetailSession"];

RadGrid RadGrid1 = new RadGrid();
RadGrid1.ID = "RadGrid1";
RadGrid1.AutoGenerateColumns = false;
RadGrid1.AllowPaging = true;
RadGrid1.AllowSorting = true;
RadGrid1.AllowFilteringByColumn = true;
RadGrid1.PageSize = 50;
RadGrid1.MasterTableView.EditMode = GridEditMode.InPlace;


RadGrid1.NeedDataSource += new GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource);
RadGrid1.ItemCommand += new GridCommandEventHandler(RadGrid1_ItemCommand);

GridEditCommandColumn EditColumn = new GridEditCommandColumn();
RadGrid1.MasterTableView.Columns.Add(EditColumn);
EditColumn.UniqueName = "Edit";

List<clsColumnList> listColumnList = null;
DynamicPopulation _objDynamic = new DynamicPopulation();
  
 //please create few columns before usage of listColumnList
 foreach (clsColumnList _clsColumnList in listColumnList)
{
GridTemplateColumn _TemplateColumn = new GridTemplateColumn();
_TemplateColumn.ItemTemplate = new ItemTemplate(_clsColumnList.COLUMN_NAME);
_TemplateColumn.EditItemTemplate = new EditItemTemplate(_clsColumnList.COLUMN_NAME, _clsColumnList.DISPLAY_NAME, ViewState["ColumnList"] as List<clsColumnList>, Convert.ToInt32(Session["CurrentMeneID"]));
_TemplateColumn.DataField = _clsColumnList.COLUMN_NAME;
_TemplateColumn.HeaderText = _clsColumnList.DISPLAY_NAME;
_TemplateColumn.UniqueName = _clsColumnList.COLUMN_NAME;

RadGrid1.MasterTableView.Columns.Add(_TemplateColumn);
}

GridButtonColumn DeleteColumn = new GridButtonColumn();
RadGrid1.MasterTableView.Columns.Add(DeleteColumn);
DeleteColumn.ButtonType = GridButtonColumnType.LinkButton;
DeleteColumn.CommandName = "Delete";
DeleteColumn.Text = "Delete";
DeleteColumn.UniqueName = "Edit";
DeleteColumn.HeaderText = "Delete";
DeleteColumn.ConfirmText = "Are you sure, you want to delete?";
RadPane2.Controls.Add(RadGrid1);

}

protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
(sender as RadGrid).DataSource = string.Empty;
DynamicPopulation _objDynamic = new DynamicPopulation();
(sender as RadGrid).DataSource = _objDynamic.GetApplicationRolePackage(Convert.ToInt32(Session["CurrentMeneID"]));
}

protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{
if (e.CommandName == RadGrid.EditCommandName)
{
(sender as RadGrid).MasterTableView.IsItemInserted = false;
}
if (e.CommandName == RadGrid.PerformInsertCommandName)
{
GridEditableItem row = e.Item as GridEditableItem;
Hashtable InsertValues = new Hashtable();
row.ExtractValues(InsertValues);
 
}
if (e.CommandName == RadGrid.UpdateCommandName)
{
GridEditableItem row = e.Item as GridEditableItem;
Hashtable InsertValues = new Hashtable();
row.ExtractValues(InsertValues);
}
if (e.CommandName == RadGrid.DeleteCommandName)
{
GridEditableItem row = e.Item as GridEditableItem;
Hashtable InsertValues = new Hashtable();
row.ExtractValues(InsertValues);
}
}
 }
}

public class EditItemTemplate : ITemplate, IBindableTemplate
{
protected LiteralControl _LiteralControl;
protected RequiredFieldValidator _RequiredFieldValidator;
protected HyperLink _HyperLink;
protected TextBox _Textbox;
protected CheckBox _Checkbox;
protected RadComboBox _RadComboBox;
private string colname;
private string DisplayName;
protected int MenuId;
List<clsColumnList> listClsColumnList;


public EditItemTemplate(string cName,string _DisplayName ,List<clsColumnList> _listClsColumnList, int _MenuId)
{
colname = cName;
DisplayName = _DisplayName;
listClsColumnList = _listClsColumnList;
MenuId = _MenuId;

}


public void InstantiateIn(Control container)
{
if (MenuId == 65)
{
if (colname == "BU_NM")
{
RadComboBox _RadComboBox = new RadComboBox();
_RadComboBox.ID = "EditlControlId_" + colname;
_RadComboBox.DataBinding += new EventHandler(RadCombbox_DataBinding);
container.Controls.Add(_RadComboBox);
}
else
{
RadTextBox _RadTextbox = new RadTextBox();
_RadTextbox.ID = "EditlControlId_" + colname;
_RadTextbox.DataBinding += new EventHandler(Textbox_DataBinding);
container.Controls.Add(_RadTextbox);
RequiredFieldValidator RFV = new RequiredFieldValidator();
RFV.ControlToValidate = _RadTextbox.ID;
RFV.ErrorMessage = "<br/>" + DisplayName + " is Mandatory";
container.Controls.Add(RFV);
//_LiteralControl = new LiteralControl();
//_LiteralControl.ID = "EditlControlId_" + colname;
//_LiteralControl.DataBinding += new EventHandler(lControl_DataBinding);
//container.Controls.Add(_LiteralControl);
}
}

}

public void lControl_DataBinding(object sender, EventArgs e)
{
LiteralControl l = (LiteralControl)sender;
GridDataItem container = (GridDataItem)l.NamingContainer;
l.Text = ((DataRowView)container.DataItem)[colname].ToString();
}

public void Textbox_DataBinding(object sender, EventArgs e)
{
RadTextBox l = (RadTextBox)sender;
GridDataItem container = (GridDataItem)l.NamingContainer;
l.Text = ((DataRowView)container.DataItem)[colname].ToString();
}

public void RadCombbox_DataBinding(object sender, EventArgs e)
{
if (MenuId == 65)
{
if (colname == "BU_NM")
{
RadComboBox cmbBusinessUnit = (RadComboBox)sender;
GridDataItem container = (GridDataItem)cmbBusinessUnit.NamingContainer;
string selectedvalue = ((DataRowView)container.DataItem)[colname].ToString();
cmbBusinessUnit.Items.Clear();
List<BusinessUnit> listBusinessUnits = BusinessUnitService.GetActiveBusinessUnitNames();
foreach (BusinessUnit obj in listBusinessUnits)
{
RadComboBoxItem item = new RadComboBoxItem(obj.business_unit_name, obj.business_unit_id.ToString());
cmbBusinessUnit.Items.Add(item);
if (obj.business_unit_name == selectedvalue)
item.Selected = true;
}
cmbBusinessUnit.Items.Insert(0, new RadComboBoxItem(string.Empty, string.Empty));
}
}

}

public System.Collections.Specialized.IOrderedDictionary ExtractValues(Control container)
{
IBindableControl control = container as IBindableControl;
GridEditFormItem item = container as GridEditFormItem;
System.Collections.Specialized.OrderedDictionary obj = new System.Collections.Specialized.OrderedDictionary();
if (MenuId == 65)
{
if (control != null)
{
control.ExtractValues(obj);
}

ControlCollection colletion = container.Controls;

//if (item != null)
//{ EditlControlId_DOMAIN_CD
if ((container.FindControl("EditlControlId_DOMAIN_CD") as TextBox) != null)
{
obj.Add("DOMAIN_CD", (item.FindControl("EditlControlId_DOMAIN_CD") as TextBox).Text);
}

if ((container.FindControl("EditlControlId_BU_NM") as TextBox) != null)
{
obj.Add("BU_NM", (item.FindControl("EditlControlId_DOMAIN_CD") as RadComboBox).SelectedValue);
}
//}

}
//KeyValuePair<int,string> _changes;

return obj;/// (IDictionaryEnumerator)_changes;
}


}

public class ItemTemplate : ITemplate
{
protected LiteralControl _LiteralControl;
protected RequiredFieldValidator _RequiredFieldValidator;
protected HyperLink _HyperLink;
protected TextBox _Textbox;
protected CheckBox _Checkbox;
protected RadComboBox _RadComboBox;
private string colname;

public ItemTemplate()
{

}

public ItemTemplate(string cName)
{
colname = cName;
}

public void InstantiateIn(Control container)
{
_LiteralControl = new LiteralControl();
_LiteralControl.ID = "lControlId_" + colname;
_LiteralControl.DataBinding += new EventHandler(lControl_DataBinding);
container.Controls.Add(_LiteralControl);

}

public void lControl_DataBinding(object sender, EventArgs e)
{
LiteralControl l = (LiteralControl)sender;
GridDataItem container = (GridDataItem)l.NamingContainer;
l.Text = ((DataRowView)container.DataItem)[colname].ToString();
}

}

public class DynamicPopulation
{
public List<clsColumnList> GetColumnList(int Menu_Id)
{
List<clsColumnList> listColumnList = null;
OracleConnection _connection = new OracleConnection(DataClasses.AppSettings.DBConnection);
try
{
string _sql = string.Format(@"SELECT COLUMN_NAME,
DISPLAY_NAME,
IS_REQUIRED,
COLUMN_TYPE
FROM MH_TABLE_COLUMNS_LIST
WHERE MENU_ID={0}
AND IS_ACTIVE=1
ORDER BY SEQUENCE_NO", Menu_Id);

using (OracleDataReader _reader = DataServices.Data.ExecuteReader(_sql, _connection))
{
if (_reader.HasRows)
{
listColumnList = new List<clsColumnList>();
while (_reader.Read())
{
clsColumnList obj = new clsColumnList();
obj.COLUMN_NAME = Convert.ToString(_reader["COLUMN_NAME"]);
obj.DISPLAY_NAME = Convert.ToString(_reader["DISPLAY_NAME"]);
obj.IS_REQUIRED = Convert.ToInt32(_reader["IS_REQUIRED"]);
obj.COLUMN_TYPE = Convert.ToString(_reader["COLUMN_TYPE"]);
listColumnList.Add(obj);
}
}
}
return listColumnList;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (_connection != null)
{
_connection.Close();
_connection.Dispose();
}
}
}
///This class is used to create list of columns
[Serializable]
public class clsColumnList
{
public string COLUMN_NAME { get; set; }
public string DISPLAY_NAME { get; set; }
public int IS_REQUIRED { get; set; }
public String COLUMN_TYPE { get; set; }
}

Please dont tell me to follow already existing threads related to this topic becuase i already went through them and could not fand any luck.

3 Answers, 1 is accepted

Sort by
0
Surendra
Top achievements
Rank 1
answered on 21 May 2014, 11:59 AM
Please somebody help me on this it would be greatly appreciated.
0
Princy
Top achievements
Rank 2
answered on 22 May 2014, 10:11 AM
Hi Surendra,

Please take a look at the sample of creating a EditItemTemplate, correct with your code accordingly.

C#:
string column = "ColumnName";
GridTemplateColumn _TemplateColumn = new GridTemplateColumn();
_TemplateColumn.ItemTemplate = new ItemTemplate(column);
_TemplateColumn.EditItemTemplate = new EditItemTemplate(column);
_TemplateColumn.DataField = column;
_TemplateColumn.HeaderText = column;
_TemplateColumn.UniqueName = column;
RadGrid1.MasterTableView.Columns.Add(_TemplateColumn);
 . . .
public class EditItemTemplate : IBindableTemplate
{
    private string colname;
    public EditItemTemplate(string cName)
    {
        colname = cName;
    }
    public void InstantiateIn(Control container)
    {
        RadComboBox _RadComboBox = new RadComboBox();
        _RadComboBox.ID = "EditlControlId_" + colname;
        _RadComboBox.DataBinding += new EventHandler(RadCombbox_DataBinding);
        container.Controls.Add(_RadComboBox);
    }
    public void RadCombbox_DataBinding(object sender, EventArgs e)
    {
        //Bind RadComboBox
    }
    public IOrderedDictionary ExtractValues(Control container)
    {
        OrderedDictionary dictionary = new OrderedDictionary();
        dictionary.Add(colname, (container.FindControl("EditlControlId_" + colname) as RadComboBox).Text);
        return dictionary;
    }
}

Thanks,
Princy
0
Surendra
Top achievements
Rank 1
answered on 22 May 2014, 10:18 AM
HI Princy,

I found the probelm in the code, actually i was casting to wrong control type and after casting to correct control type solved the problem.

Thanks for your reply.

Surendra Kumar
Tags
Grid
Asked by
Surendra
Top achievements
Rank 1
Answers by
Surendra
Top achievements
Rank 1
Princy
Top achievements
Rank 2
Share this question
or