I think a DataContext instance is required to update a DB.
I should clarify the following things:
1. The OnBeforeStoreChanged event is fired when there was any change (-s) in a Store and the Store's method .save() is called (or grid.save()).
2. So, when the RowEditor's AfterEdit is fired, then a OnBeforeStoreChanged handler is not executed.
Here is the example demonstrating what I said.
Example
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
Store store = this.GridPanel1.GetStore();
store.DataSource = new object[]
{
new object[] {"test1", "test2" },
new object[] {"test3", "test4" },
new object[] {"test5", "test6" },
};
store.DataBind();
}
}
protected void Store_BeforeStoreChanged(object sender, BeforeStoreChangedEventArgs e)
{
X.Js.Call("addlog", "<br/>Store_BeforeStoreChanged");
}
protected void RowEditor_AfterEdit(object sender, DirectEventArgs e)
{
X.Js.Call("addlog", "<br/>RowEditor_AfterEdit : " + e.ExtraParams["data"]);
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Ext.Net Example</title>
<script type="text/javascript">
var addlog = function (html) {
Ext.get("log").insertHtml("beforeEnd", html);
};
</script>
</head>
<body>
<form runat="server">
<ext:ResourceManager runat="server" />
<ext:GridPanel ID="GridPanel1" runat="server" AutoHeight="true">
<Store>
<ext:Store runat="server" OnBeforeStoreChanged="Store_BeforeStoreChanged">
<Reader>
<ext:ArrayReader>
<Fields>
<ext:RecordField Name="test1" />
<ext:RecordField Name="test2" />
</Fields>
</ext:ArrayReader>
</Reader>
</ext:Store>
</Store>
<ColumnModel runat="server">
<Columns>
<ext:Column Header="Test1" DataIndex="test1">
<Editor>
<ext:TextField runat="server" />
</Editor>
</ext:Column>
<ext:Column Header="Test2" DataIndex="test2" />
</Columns>
</ColumnModel>
<Plugins>
<ext:RowEditor runat="server">
<DirectEvents>
<AfterEdit OnEvent="RowEditor_AfterEdit">
<ExtraParams>
<ext:Parameter Name="data" Value="r.data" Mode="Raw" Encode="true" />
</ExtraParams>
</AfterEdit>
</DirectEvents>
</ext:RowEditor>
</Plugins>
</ext:GridPanel>
<ext:Button runat="server" Text="Save">
<Listeners>
<Click Handler="GridPanel1.save();" />
</Listeners>
</ext:Button>
<div id="log"></div>
</form>
</body>
</html>
So, I think you can use these two options:
1. Save updated data within RowEditor's AfterEdit DirectEvent handler. Creating a DataContext instance is required.
2. Calling
grid.save()
within RowEditor's AfterEdit client side listener to force OnBeforeStoreChanged event.