Dec 30, 2013, 12:18 PM
[CLOSED] Javascript error on cell click
Hi Ext.NET Team,
We have a grid whose columns we are generating dynamically through c#. Below is the snippet of the grid:
//View
// Controller
In the GetSalesData Ajax call we have below code:
So when we run with the above code the grid gets loaded fine as shown in above attachment with the dynamic columns. But when we try to edit cells under columns e.g:"Jan-Dec 2013" we get a javascript exception as shown in the below attachment
Please let me know what could be wrong / missing in the code. Also let me know if you need any more information
Thanks
We have a grid whose columns we are generating dynamically through c#. Below is the snippet of the grid:
//View
Html.X().GridPanel().ID("grdPacks2").Scroll(ScrollMode.Both)
.Store(
X.Store().ID("Store1").RemoteFilter(true).RemoteSort(true)
.PageSize(
Convert.ToInt32(PriceRight.Settings.PropertyReader.GetProperty("GRID_PAGE_SIZE"))
)
.Proxy(
Html.X().AjaxProxy()
.Url(Url.Action("GetSalesData"))
.Reader(Html.X().JsonReader().Root("data"))
.ExtraParams(x => x.Add(new Parameter() { Name = "scenarioId", Value = Model.Scenario.ScenarioUUID.ToString(), Mode = ParameterMode.Raw }))
.ExtraParams(x => x.Add(new Parameter() { Name = "scenarioAsOfDate", Value = Model.Scenario.SCENARIO_AS_OF_DATE.ToString(), Mode = ParameterMode.Value }))
)
.Model(Html.X().Model().ID("ProjectSalesModel").Fields(ViewBag.Mfields))
)//End Store
.ColumnModel(
((IEnumerable<object>)ViewBag.columns).Cast<ColumnBase>()
)//End ColumnModel
.SelectionModel(Html.X().CellSelectionModel()) //End SelectionModel
//.Plugins(Html.X().CellEditing().Listeners(l => { l.BeforeEdit.Handler = "return !e.grid.lockEditing;"; })) //End Plugins
.Plugins(Html.X().CellEditing().Listeners(l => { l.BeforeEdit.Fn = "cellEdit"; }))
// Controller
In the GetSalesData Ajax call we have below code:
private ActionResult FromDatabase(string scenarioId, StoreRequestParameters parameters, DateTime scenarioAsOfDate)
{
try
{
var finallist = svc.GetRecords(Convert.ToInt32(scenarioId));
Paging<ExpandoObject> paging = new Paging<ExpandoObject>();
//Filter data
finallist = paging.Filter<ExpandoObject>(finallist, parameters.GridFilters);
//Sort data
finallist = paging.Sort<ExpandoObject>(finallist,
parameters.SimpleSort,
parameters.SimpleSortDirection);
//get page size
int pageSize = paging.GetCurrentPageSize<ExpandoObject>(parameters.Limit, parameters.Start, finallist.Count);
//extract current page records
List<ExpandoObject> packs = paging.GetCurrentPageData<ExpandoObject>(finallist,
parameters.Start,
pageSize);
//creating paging object
var data = new Paging<ExpandoObject>(packs, finallist.Count);
return this.Store(data);
}
catch (Exception)
{
throw;
}
}
//Index action method that gets called when page is loaded for the first time.
public ActionResult Index(int scenarioId, string actiontype)
{
var list = _svc.GetRecords(Convert.ToInt32(scenarioId));
DataTable dt = GenereateDataTable(list, scenarioId, salesViewModel.Scenario.SCENARIO_AS_OF_DATE.Value);
string months ="Jan-Dec ";
foreach (DataColumn c in dt.Columns)
{
Column cl = new Column();
clnm = new ColumnName();
if (columnsToBeHidden.Contains(c.ColumnName) ||
(c.ColumnName.StartsWith("ScenarioCountryPackSalesUUID")))
{
cl.Hidden = true;
}
if (c.ColumnName == "Country" || c.ColumnName == "Pack")
{
cl.Groupable = true;
}
if (c.ColumnName.Contains(months))
{
NumberColumn numcol = new NumberColumn();
clnm.Text = numcol.Text = c.Caption;
clnm.DataIndex = numcol.DataIndex = c.ColumnName;
numcol.ID = c.ColumnName;
NumberField nf = new NumberField();
nf.Listeners.Blur.Fn = "cellBlur";
nf.MaxLength = 9;
nf.SelectOnFocus = true;
numcol.Editor.Add(nf);
numcol.Groupable = false;
numcol.Flex = 1;
Columns.Add(numcol);
}
else// non year columns
{
cl.ID = c.ColumnName;
clnm.Text = cl.Text = c.Caption;
clnm.DataIndex = cl.DataIndex = c.ColumnName;
Columns.Add(cl);
cl.Flex = 1;
}
columnNames.Add(clnm);
}
ViewBag.columns = Columns;
List<ModelField> Mfields = (from fld in columnNames
select new ModelField { Name = fld.DataIndex }).ToList();
foreach (ModelField f in Mfields)
{
if (f.Name.Contains(months))
{
f.Type = ModelFieldType.Int;
}
}
}
//Generate DataTable Method
private DataTable GenereateDataTable(IList<ScenarioSalesDTO> list, int scenarioId, DateTime scenarioAsOfDate)
{
DataTable dataTable = new DataTable();
var countryColumn = new DataColumn("Country");
dataTable.Columns.Add(countryColumn);
var packColumn = new DataColumn("Pack");
dataTable.Columns.Add(packColumn);
int currentYear = scenarioAsOfDate.Year;
var packCd = new DataColumn("PackCD");
dataTable.Columns.Add(packCd);
var countryCode = new DataColumn("CountryCode");
dataTable.Columns.Add(countryCode);
ScenarioDTO scenariodto = _readService.GetScenarioById(scenarioId).TheEntity;
int yearsCount = scenariodto.AnalysisTimeHorizonMonths / 12;
//for (int i = 0; i <= analysisHorizon / 12; i++)
for (int i = 0; i <= yearsCount; i++)
{
if (i > 0)
currentYear = currentYear + 1;
DataColumn yearColumn = new DataColumn(months + currentYear);
var uniqueId = new DataColumn("ScenarioCountryPackSalesUUID" + currentYear);
yearColumn.Caption = months + currentYear;
dataTable.Columns.Add(yearColumn);
dataTable.Columns.Add(uniqueId);
}
return dataTable;
}
So when we run with the above code the grid gets loaded fine as shown in above attachment with the dynamic columns. But when we try to edit cells under columns e.g:"Jan-Dec 2013" we get a javascript exception as shown in the below attachment
Please let me know what could be wrong / missing in the code. Also let me know if you need any more information
Thanks
Last edited by geoffrey.mcgill; Jan 03, 2014 at 3:10 AM.
Reason: [CLOSED]