Sep 03, 2014, 7:57 PM
[CLOSED] Dynamically add row (MVC)
Hi, I am using Ext.net 2.5.1 with MVC for grid on desktop window. The grid is loaded with proxy, it is displayed fine. the Add button calls JS that invokes server to get a prepopulated row object and inserts it to store. no error on AddRow () action, but it adds an empty row without using the value returned from the object. Any idea what should I check?
Thanks
-susan zhang
This is json string the proxy return to grid load :
Thanks
-susan zhang
GridPanel.cshtml
<script>
var onAddRow = function (grid) {
var selectedKey = -1;
// get selectedKey value from selected row
//..
Ext.Ajax.request({
url: '@Url.Action("AddRow", "Grid")',
params: {
gridid: grid.id,
selectedKey: selectedKey,
isCopy: false
},
success: function (newRow) {
grid.store.insert(0, newRow);
}
});
}
</script>
@(
Html.X().Viewport()
.Layout(LayoutType.Fit)
.Items(
Html.X().GridPanel()
.ID("gPanel" + Model.GridIDInt) //GridPanel ID
.Layout (LayoutType.Anchor)
.Frame(true)
.Store(
Html.X().Store()
.ID (Model.GridID)
.RemotePaging(false)
.PageSize(20)
.Proxy (
Html.X().AjaxProxy ()
.Url (Url.Action("LoadGridData", "Grid"))
.Reader(Html.X().JsonReader()
)
)
.Model(Model.StoreModel) //define model data schema
.Parameters( new { gridId = Model.GridIDInt })
)
.ColumnModel(Model.Columns) //define display columns
.TopBar(
Html.X().Toolbar()
.Items(
Html.X().Button()
.Text("Add")
.Icon(Icon.Add)
.Handler ("onAddRow (this.up('grid'))"),
}),
....
)//end toolbar items
)//end toolbar
.BottomBar(Html.X().PagingToolbar())
.SelectionModel(
Html.X().RowSelectionModel()
.Mode(SelectionMode.Single)
)
.View(
Html.X().GridView()
.StripeRows(true)
.LoadingText("Loading Grid Data...")
)
.Plugins(
Html.X().CellEditing().ClicksToEdit(1)
)
.Features(
Html.X().Grouping()
.ID("Grouping1")
.HideGroupedHeader(true)
.GroupHeaderTplString("{columnName}: {name} ({[values.rows.length]} {[values.rows.length > 1 ? \"Items\" : \"Item\"]})"),
Html.X().RowWrap(),
Html.X().Summary().ID("Total" + Model.GridIDInt)
)
)
)
GridController.cs
public ActionResult AddRow(int gridid, int selectedKey, bool isCopy)
{
var gModel = new GridModel();
var obj = gModel.InsertNewDataRowToCache(gridid, selectedKey, isCopy);
return this.Direct(obj.RowObject);
}
The AddRow() ajax response body:{"result":{"valuesStorage":{"cd_Account":"SampleKey1","IFAS_Contract_POP_Start_Date":"","IFAS_Contract_POP_End_Date":"","RowStatus":"IsError":false,"IsNew":true}}}
I can see the prepopulated value in retuning obj. The obj format matches the Jason string for loadingThis is json string the proxy return to grid load :
[{"valuesStorage":
{"cd_Account":"SampleKey1",
"IFAS_Contract_POP_Start_Date":"",
"IFAS_Contract_POP_End_Date":"",
"RowStatus":
{"IsError":false,"IsNew":false}
},
{"valuesStorage":
{"cd_Account":"SampleKey1",
"IFAS_Contract_POP_Start_Date":"",
"IFAS_Contract_POP_End_Date":"",
"RowStatus":{"IsError":false,"IsNew":false}
},
{"valuesStorage":
{"cd_Account":"SampleKey1",
"IFAS_Contract_POP_Start_Date":"",
"RowStatus":{"IsError":false,"IsNew":false}
}
]
Last edited by Daniil; Sep 04, 2014 at 2:53 PM.
Reason: Please use [CODE] tags, [CLOSED]