I made a Grid entirely in CodeBehind, I used the personalizated Template to edit or insert new values.
RadGrid gridTemplate =
new
RadGrid();
DataSet dsTemplate =
new
DataSet();
dsTemplate = ReglasNotificacion.GetTemplates(Convert.ToInt32(dt.Rows[i][
"rule_order"
].ToString()));
gridTemplate.ID =
"Grid_"
+ dt.Rows[i][
"rule_order"
].ToString();
gridTemplate.Attributes.Add(
"IDRegla"
, dt.Rows[i][
"rule_order"
].ToString());
gridTemplate.AllowPaging =
true
;
gridTemplate.PageSize = 10;
gridTemplate.AllowSorting =
true
;
gridTemplate.ShowStatusBar =
true
;
gridTemplate.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric;
gridTemplate.RenderMode = RenderMode.Auto;
gridTemplate.Skin =
"Bootstrap"
;
gridTemplate.MasterTableView.AutoGenerateColumns =
false
;
gridTemplate.MasterTableView.DataKeyNames =
new
string
[] {
"Cod_Notification"
,
"Cod_Site"
,
"Cod_Template"
};
gridTemplate.MasterTableView.CommandItemSettings.AddNewRecordText =
"AƱadir nuevo registro."
;
gridTemplate.MasterTableView.CommandItemSettings.ShowRefreshButton =
false
;
gridTemplate.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.Top;
gridTemplate.MasterTableView.EditMode = GridEditMode.EditForms;
gridTemplate.MasterTableView.EditFormSettings.EditFormType = GridEditFormType.Template;
gridTemplate.MasterTableView.EditFormSettings.FormTemplate =
new
MyEditFormTemplate();
gridTemplate.MasterTableView.AllowAutomaticUpdates =
false
;
gridTemplate.MasterTableView.AllowAutomaticDeletes =
false
;
gridTemplate.MasterTableView.AllowAutomaticInserts =
false
;
gridTemplate.ItemCommand +=
new
GridCommandEventHandler(gridTemplate_ItemCommand);
GridEditCommandColumn edit =
new
GridEditCommandColumn();
edit.UniqueName =
"EditCommandColumn"
;
gridTemplate.MasterTableView.Columns.Add(edit);
GridBoundColumn boundColumn;
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"Cod_Notification"
;
boundColumn.HeaderText =
"Rule"
;
boundColumn.SortExpression =
"Cod_Notification"
;
boundColumn.UniqueName =
"Cod_Notification"
;
boundColumn.Visible =
false
;
gridTemplate.MasterTableView.Columns.Add(boundColumn);
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"Cod_Site"
;
boundColumn.HeaderText =
"Site"
;
boundColumn.SortExpression =
"Cod_Site"
;
boundColumn.UniqueName =
"Cod_Site"
;
boundColumn.Visible =
false
;
gridTemplate.MasterTableView.Columns.Add(boundColumn);
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"Txt_Site"
;
boundColumn.HeaderText =
"Site"
;
boundColumn.SortExpression =
"Txt_Site"
;
boundColumn.UniqueName =
"Txt_Site"
;
boundColumn.Visible =
true
;
boundColumn.ItemStyle.Width =
new
Unit(10, UnitType.Percentage);
gridTemplate.MasterTableView.Columns.Add(boundColumn);
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"Txt_Template"
;
boundColumn.HeaderText =
"Template"
;
boundColumn.SortExpression =
"Txt_Template"
;
boundColumn.UniqueName =
"Txt_Template"
;
boundColumn.Visible =
true
;
boundColumn.ItemStyle.Width =
new
Unit(40, UnitType.Percentage);
gridTemplate.MasterTableView.Columns.Add(boundColumn);
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"Subject"
;
boundColumn.HeaderText =
"Subject"
;
boundColumn.SortExpression =
"Subject"
;
boundColumn.UniqueName =
"Subject"
;
boundColumn.Visible =
true
;
boundColumn.ItemStyle.Width =
new
Unit(40, UnitType.Percentage);
gridTemplate.MasterTableView.Columns.Add(boundColumn);
boundColumn =
new
GridBoundColumn();
boundColumn.DataField =
"Cod_Active"
;
boundColumn.HeaderText =
"Active"
;
boundColumn.SortExpression =
"Cod_Active"
;
boundColumn.UniqueName =
"Cod_Active"
;
boundColumn.Visible =
true
;
boundColumn.ItemStyle.Width =
new
Unit(10, UnitType.Percentage);
gridTemplate.MasterTableView.Columns.Add(boundColumn);
GridButtonColumn gBtnColumn =
new
GridButtonColumn();
gBtnColumn.CommandName =
"Delete"
;
gBtnColumn.Text =
"Delete"
;
gBtnColumn.ButtonType = GridButtonColumnType.ImageButton;
gridTemplate.MasterTableView.Columns.Add(gBtnColumn);
gridTemplate.DataSource = dsTemplate;
I made the class to use to with the TemplateForm.
public
class
MyEditFormTemplate : IBindableTemplate
{
public
void
InstantiateIn(Control container)
{
GridEditFormItem item = ((GridEditFormItem)(container.NamingContainer));
//tb1.Text = item.ParentItem.OwnerTableView.DataKeyValues[((GridDataItem)(item.ParentItem)).ItemIndex]["ProviderName"].ToString();
HtmlTable tableLine =
new
HtmlTable();
tableLine.ID =
"Table_Template"
;
tableLine.Width =
"100%"
;
tableLine.Align =
"center"
;
HtmlTableRow rowTemplate =
new
HtmlTableRow();
HtmlTableCell cellTemplate =
new
HtmlTableCell();
HtmlTableCell cellTemplateSite =
new
HtmlTableCell();
HtmlTableCell cellTemplateTemplate =
new
HtmlTableCell();
HtmlTableCell cellTemplateSubject =
new
HtmlTableCell();
HtmlTableCell cellTemplateActive =
new
HtmlTableCell();
HtmlTableCell cellTemplateButton =
new
HtmlTableCell();
DropDownList Site =
new
DropDownList();
DropDownList Template =
new
DropDownList();
TextBox Subject =
new
TextBox();
RadButton Activo =
new
RadButton();
ImageButton Aceptar =
new
ImageButton();
ImageButton Cancelar =
new
ImageButton();
DataTable dtSite = TENDERS_Administracion_DefinicionEnvioNotificaciones.getSites();
DataRow drowSite = dtSite.NewRow();
drowSite[
"COD_ITEM"
] =
"-1"
;
drowSite[
"TXT_ITEM"
] =
""
;
dtSite.Rows.InsertAt(drowSite, 0);
Site.DataSource = dtSite;
//TENDERS_Administracion_DefinicionEnvioNotificaciones.getSites();
Site.DataValueField =
"COD_ITEM"
;
Site.DataTextField =
"TXT_ITEM"
;
Site.Width =
new
Unit(70, UnitType.Percentage);
Site.ID =
"SiteRule"
;
DataTable dtTemplate = TENDERS_Administracion_DefinicionEnvioNotificaciones.getTemplates();
DataRow drowTemplate = dtTemplate.NewRow();
drowTemplate[
"COD_ITEM"
] =
"-1"
;
drowTemplate[
"TXT_ITEM"
] =
""
;
dtTemplate.Rows.InsertAt(drowTemplate, 0);
Template.DataSource = dtTemplate;
//TENDERS_Administracion_DefinicionEnvioNotificaciones.getTemplates();
Template.DataValueField =
"COD_ITEM"
;
Template.DataTextField =
"TXT_ITEM"
;
Template.Width =
new
Unit(70, UnitType.Percentage);
Template.ID =
"TemplateRule"
;
Subject.Width =
new
Unit(70, UnitType.Percentage);
Subject.Style.Add(
"padding"
,
"unset"
);
Subject.Style.Add(
"height"
,
"unset"
);
Subject.Style.Add(
"border-color"
,
"unset"
);
Subject.Style.Add(
"border-radius"
,
"unset"
);
Subject.ID =
"SubjectRule"
;
Activo.ToggleType = ButtonToggleType.CheckBox;
Activo.ButtonType = RadButtonType.ToggleButton;
Activo.ToggleStates.Add(
"Activado"
);
Activo.ToggleStates.Add(
"Desactivado"
);
Activo.ID =
"ActivoRule"
;
Aceptar.ImageUrl =
"~/MRA/img/Ico/guardar.png"
;
Aceptar.CssClass =
"GuardarRegla"
;
Aceptar.ToolTip =
"Guardar"
;
Aceptar.CommandName =
"Guardar"
;
Aceptar.Style.Add(
"width"
,
"11px"
);
Aceptar.Style.Add(
"height"
,
"11px"
);
Aceptar.Style.Add(
"padding"
,
"unset"
);
Aceptar.Style.Add(
"border-radius"
,
"unset"
);
Aceptar.Style.Add(
"margin-right"
,
"unset"
);
Aceptar.Style.Add(
"border"
,
"unset !important"
);
Cancelar.ImageUrl =
"~/MRA/img/Ico/eliminar2.png"
;
Cancelar.CssClass =
"EliminarCondicion"
;
Cancelar.ToolTip =
"Cancelar"
;
Cancelar.CommandName =
"Cancelar"
;
Cancelar.Style.Add(
"width"
,
"11px"
);
Cancelar.Style.Add(
"height"
,
"11px"
);
Cancelar.Style.Add(
"padding"
,
"unset"
);
Cancelar.Style.Add(
"border-radius"
,
"unset"
);
Cancelar.Style.Add(
"margin-right"
,
"unset"
);
Cancelar.Style.Add(
"margin-left"
,
"4px"
);
Cancelar.Style.Add(
"border"
,
"unset !important"
);
if
(((Telerik.Web.UI.GridItem)container.NamingContainer).DataItem !=
null
&& (((Telerik.Web.UI.GridItem)container.NamingContainer).DataItem).ToString() !=
"Telerik.Web.UI.GridInsertionObject"
)
{
DataTable dtData = ((System.Data.DataRowView)((Telerik.Web.UI.GridItem)container.NamingContainer).DataItem).DataView.Table;
Site.SelectedValue = dtData.Rows[0][
"Cod_Site"
].ToString();
Template.SelectedValue = dtData.Rows[0][
"Cod_Template"
].ToString();
Subject.Text = dtData.Rows[0][
"Subject"
].ToString();
Activo.Checked = dtData.Rows[0][
"COD_ACTIVE"
].ToString() ==
"S"
?
true
:
false
;
}
cellTemplate.Style.Add(
"width"
,
"2%"
);
cellTemplateSite.Controls.Add(Site);
cellTemplateSite.Style.Add(
"width"
,
"10%"
);
cellTemplateTemplate.Controls.Add(Template);
cellTemplateTemplate.Style.Add(
"width"
,
"40%"
);
cellTemplateSubject.Controls.Add(Subject);
cellTemplateSubject.Style.Add(
"width"
,
"40%"
);
cellTemplateActive.Controls.Add(Activo);
cellTemplateActive.Style.Add(
"width"
,
"10%"
);
cellTemplateButton.Controls.Add(Aceptar);
cellTemplateButton.Controls.Add(Cancelar);
rowTemplate.Cells.Add(cellTemplate);
rowTemplate.Cells.Add(cellTemplateSite);
rowTemplate.Cells.Add(cellTemplateTemplate);
rowTemplate.Cells.Add(cellTemplateSubject);
rowTemplate.Cells.Add(cellTemplateActive);
rowTemplate.Cells.Add(cellTemplateButton);
tableLine.Rows.Add(rowTemplate);
container.Controls.Add(tableLine);
}
public
System.Collections.Specialized.IOrderedDictionary ExtractValues(System.Web.UI.Control container)
{
OrderedDictionary od =
new
OrderedDictionary();
od.Add(
"IDRegla"
, ((RadGrid)container.Parent.Parent.Parent).Attributes[
"IDRegla"
].ToString());
od.Add(
"Cod_Notification"
, ((GridEditFormItem)(container)).ParentItem.OwnerTableView.DataKeyValues[((GridDataItem)(((GridEditFormItem)(container)).ParentItem)).ItemIndex][
"Cod_Notification"
].ToString());
od.Add(
"Cod_Site"
, ((GridEditFormItem)(container)).ParentItem.OwnerTableView.DataKeyValues[((GridDataItem)(((GridEditFormItem)(container)).ParentItem)).ItemIndex][
"Cod_Site"
].ToString());
od.Add(
"Cod_Template"
, ((GridEditFormItem)(container)).ParentItem.OwnerTableView.DataKeyValues[((GridDataItem)(((GridEditFormItem)(container)).ParentItem)).ItemIndex][
"Cod_Template"
].ToString());
od.Add(
"Site"
, ((DropDownList)(((GridEditFormItem)(container)).FindControl(
"SiteRule"
))).SelectedValue);
od.Add(
"Template"
, ((DropDownList)(((GridEditFormItem)(container)).FindControl(
"TemplateRule"
))).SelectedValue);
od.Add(
"Subject"
, ((TextBox)(((GridEditFormItem)(container)).FindControl(
"SubjectRule"
))).Text);
od.Add(
"Active"
, ((RadButton)(((GridEditFormItem)(container)).FindControl(
"ActivoRule"
))).Checked ==
true
?
'S'
:
'N'
);
return
od;
}
}
But I have some problems.
- The form template doesn't disappear when used a imagebutton.
- When used the imagebutton to save data, I can't read ExtractValues for my form template class, because the ItemCommand doesn't use MyEditFormTemplate class.
protected
void
gridTemplate_ItemCommand(
object
sender, GridCommandEventArgs e)
{
string
command = e.CommandName;
if
(command ==
"Cancelar"
)
{
e.Canceled =
true
;
}
else
if
(command ==
"Guardar"
)
{
e.Canceled =
true
;
GridDataItem grid = ((GridDataItem )(e.Item));
Hashtable table =
new
Hashtable();
grid.ExtractValues(table);
}
//e.KeepInEditMode = true;
//((RadGrid)e.Item.Parent.Parent.Parent).DataBind();
((RadGrid)e.Item.Parent.Parent.Parent).Rebind();
}
Any Idea?
Thank you very much