Hi,
I have a grid with 4 columns:
Column 1 - an editable GridDateTimeColumn which displays and accepts a date
Column 2 - an editable GridNumericColumn which displays and accepts an integer
Column 3 - an editable GridBoundColumn which displays and accepts a string
Column 4 - a GridEditCommandColumn
The grid is created at runtime (instead of at design time).
I get the following error message:
"Editor cannot be initialized for column: Date"
when I exit from the edit mode by either clicking Update or Cancel button on the GridEditCommandColumn.
Can you please show me what I have missed or done wrong in my code?
The web page is available on http://www.gouw.ws/RadGrid/DynamicGrid.aspx
The source code is given below:
ASPX:
=====
<form id="form1" runat="server">
<div>
<telerik:RadScriptManager ID="radScriptManager" runat="server" />
<telerik:RadGrid ID="radGrid" AutoGenerateColumns="false" GridLines="Vertical" OnNeedDataSource="radGrid_NeedDataSource" OnUpdateCommand="radGrid_UpdateCommand" runat="server">
<ClientSettings>
<Scrolling UseStaticHeaders="true" />
</ClientSettings>
<MasterTableView EditMode="InPlace" TableLayout="Fixed">
</MasterTableView>
</telerik:RadGrid>
</div>
</form>
C#:
===
public partial class DynamicGrid : System.Web.UI.Page
{
private List<Data> _data = null;
protected void Page_Load(object sender, EventArgs e)
{
BuildGrid();
if (!IsPostBack)
{
this._data = Data.Load();
Session["DATA"] = this._data;
}
else
{
this._data = (List<Data>)Session["DATA"];
}
}
protected void radGrid_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
this.radGrid.DataSource = this._data;
}
protected void radGrid_UpdateCommand(object sender, GridCommandEventArgs e)
{
if (e.Item is GridEditableItem && e.Item.IsInEditMode)
{
GridEditableItem item = e.Item as GridEditableItem;
((Data)(this._data[item.ItemIndex])).Date = (item["Date"].Controls[0] as RadDatePicker).SelectedDate.Value.Date;
((Data)(this._data[item.ItemIndex])).Value = int.Parse((item["Value"].Controls[0] as RadNumericTextBox).Text);
((Data)(this._data[item.ItemIndex])).Description = (item["Description"].Controls[0] as TextBox).Text;
}
}
private void BuildGrid()
{
this.radGrid.Columns.Clear();
GridDateTimeColumn dateColumn = new GridDateTimeColumn();
dateColumn.DataField = "Date";
dateColumn.HeaderText = "Date";
dateColumn.UniqueName = "Date";
this.radGrid.Columns.Add(dateColumn);
this.radGrid.MasterTableView.Columns[0].HeaderStyle.Width = Unit.Percentage(13);
this.radGrid.MasterTableView.Columns[0].ItemStyle.HorizontalAlign = HorizontalAlign.Left;
GridNumericColumn valueColumn = new GridNumericColumn();
valueColumn.DataField = "Value";
valueColumn.HeaderText = "Value";
valueColumn.UniqueName = "Value";
this.radGrid.Columns.Add(valueColumn);
this.radGrid.MasterTableView.Columns[1].HeaderStyle.Width = Unit.Percentage(13);
this.radGrid.MasterTableView.Columns[1].ItemStyle.HorizontalAlign = HorizontalAlign.Left;
GridBoundColumn descriptionColumn = new GridBoundColumn();
descriptionColumn.DataField = "Description";
descriptionColumn.HeaderText = "Description";
descriptionColumn.UniqueName = "Description";
this.radGrid.Columns.Add(descriptionColumn);
this.radGrid.MasterTableView.Columns[2].HeaderStyle.Width = Unit.Percentage(64);
this.radGrid.MasterTableView.Columns[2].ItemStyle.HorizontalAlign = HorizontalAlign.Left;
GridEditCommandColumn editColumn = new GridEditCommandColumn();
editColumn.ButtonType = GridButtonColumnType.LinkButton;
editColumn.UniqueName = "Edit";
this.radGrid.Columns.Add(editColumn);
}
}
public class Data
{
public DateTime Date { get; set; }
public int Value { get; set; }
public string Description { get; set; }
public Data(DateTime date, int value, string description)
{
Date = date;
Value = value;
Description = description;
}
public static List<Data> Load()
{
List<Data> data = new List<Data>();
data.Add(new Data(DateTime.Now, 1, "This date is today"));
data.Add(new Data(DateTime.Now.AddDays(1), 2, "This date is tomorrow"));
data.Add(new Data(DateTime.Now.AddDays(2), 3, "This date is the day after tomorrow"));
return data;
}
}
Thanks & regards,
Herman Gouw
Skype: hermangouw