Oct 22, 2015, 3:58 PM
Well, OK. I made a sample and it works. Only what I want to ask you more, is there a better way to do this, because it seems that it reloading of grid takes more time then property grid.
View:
View:
@Html.X().ResourceManager()
@(
Html.X().Panel().Layout(LayoutType.HBox).LayoutConfig(new HBoxLayoutConfig { Align = HBoxAlign.Stretch })
.Items
(
Html.X().GridPanel().ID("mainGrid").Title("GridPanel with PropertyGrid").Flex(8)
.Store
(
Html.X().Store().AutoLoad(true).Proxy(Html.X().AjaxProxy().Url(Url.Action("GetObjects")).Reader(Html.X().ArrayReader().Root("data")))
.Model
(
Html.X().Model()
.Fields
(
new ModelField("id", ModelFieldType.Int),
new ModelField("company"),
new ModelField("price", ModelFieldType.Float),
new ModelField("change", ModelFieldType.Float),
new ModelField("pctChange", ModelFieldType.Float),
new ModelField("lastChange", ModelFieldType.Date)
)
)
)
.ColumnModel
(
Html.X().Column().Text("Company").DataIndex("company").Flex(1),
Html.X().Column().Text("Price").DataIndex("price").Width(75).Renderer(RendererFormat.UsMoney),
Html.X().Column().Text("Change").DataIndex("change").Width(75),
Html.X().Column().Text("Change").DataIndex("pctChange").Width(75),
Html.X().DateColumn().Text("Last Updated").DataIndex("lastChange").Width(85).Format("H:mm:ss")
)
.Listeners(l =>
{
l.SelectionChange.Handler = "if (selected[0]) { this.next('grid').getStore().reload(); }";
})
,
Html.X().GridPanel().Title("Properties").Flex(2)
.Store
(
Html.X().Store().GroupField("area")
.Model
(
Html.X().Model()
.Fields
(
new ModelField("area"),
new ModelField("fieldName"),
new ModelField("fieldValue")
)
)
.Proxy(Html.X().AjaxProxy().Url(Url.Action("FillProperties")).Reader(Html.X().JsonReader().Root("data")))
.Parameters
(
Html.X().StoreParameter().Name("selectedRows").Value("Ext.encode(App.mainGrid.getRowsValues({selectedOnly: true}))").Mode(ParameterMode.Raw)
)
)
.ColumnModel
(
Html.X().Column().Text("Name").DataIndex("fieldName").Flex(1).MenuDisabled(true).Sortable(false),
Html.X().Column().Text("Value").DataIndex("fieldValue").Flex(1).MenuDisabled(true).Sortable(false),
Html.X().Column().DataIndex("area").Hidden(true)
)
.Features(Html.X().Grouping().EnableGroupingMenu(false).GroupHeaderTplString("{name}"))
)
)
Controller: public ActionResult FillProperties(string selectedRows)
{
List<Dictionary<string, string>> values = new List<Dictionary<string, string>>()
{
new Dictionary<string, string>() { { "area", "General data" }, { "fieldName", "Company" }, { "fieldValue", "" } },
new Dictionary<string, string>() { { "area", "General data" }, { "fieldName", "Price" }, { "fieldValue", "" } },
new Dictionary<string, string>() { { "area", "Statistical data" }, { "fieldName", "Change" }, { "fieldValue", "" } },
new Dictionary<string, string>() { { "area", "Statistical data" }, { "fieldName", "Percent change" }, { "fieldValue", "" } },
new Dictionary<string, string>() { { "area", "Statistical data" }, { "fieldName", "Last Updated" }, { "fieldValue", "" } }
};
if (selectedRows != "[]")
{
List<Dictionary<string, string>> rows = JSON.Deserialize<List<Dictionary<string, string>>>(selectedRows);
Dictionary<string, string> selected = rows[0];
values.Find(i => i.ContainsValue("Company"))["fieldValue"] = selected["company"];
values.Find(i => i.ContainsValue("Price"))["fieldValue"] = selected["price"];
values.Find(i => i.ContainsValue("Change"))["fieldValue"] = selected["change"];
values.Find(i => i.ContainsValue("Percent change"))["fieldValue"] = selected["pctChange"];
values.Find(i => i.ContainsValue("Last Updated"))["fieldValue"] = selected["lastChange"];
}
return this.Store(values);
}