Hi Daniil,
I have produced a test case.
The User selects the first row and clicks the Popup button. This opens up a FieldSet which contains a DisplayField called Label1: and this updates the DisplayField.Text value to C1. The User then selects the Close button and selects the second row and clicks the Popup button. When the FieldSet is open the Label1.Text should display C2 but still displays C1.
To set the DisplayField.Text I use a Renderer.
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
List<object> data = new List<object>
{
new {Country = "C1", State = "C1_S1"},
new {Country = "C2", State = "C2_S1"},
new {Country = "C3", State = "C3_S1"},
};
Store1.DataSource = data;
List<object> countries = new List<object>(10);
for (int i = 1; i <= 10; i++)
{
countries.Add(new { Text = "C" + i });
}
CountryStore.DataSource = countries;
List<object> test = new List<object>
{
new {City = "C1_S1_C1"},
new {City = "C2_S1_C1"},
new {City = "C3_S1_C1"},
};
Store2.DataSource = test;
}
}
protected void StatesRefresh(object sender, StoreReadDataEventArgs e)
{
string country = e.Parameters["query"];
List<object> states = new List<object>(10);
for (int i = 1; i <= 10; i++)
{
states.Add(new { Text = country + "_S" + i });
}
StateStore.DataSource = states;
StateStore.DataBind();
}
protected void CitiesRefresh(object sender, StoreReadDataEventArgs e)
{
string state = e.Parameters["query"];
List<object> cities = new List<object>(10);
for (int i = 1; i <= 10; i++)
{
cities.Add(new { Text = state + "_C" + i });
}
CityStore.DataSource = cities;
CityStore.DataBind();
}
protected void Edit(object sender, DirectEventArgs e)
{
List<string> fields = new List<string> { "country", "state", "city" };
int startIndex = fields.IndexOf(e.ExtraParams["field"]);
JsonObject data = JSON.Deserialize<JsonObject>(e.ExtraParams["record"]);
ModelProxy record = this.Store1.GetAt(int.Parse(e.ExtraParams["index"]));
for (int i = startIndex + 1; i < 4; i++)
{
switch (fields[i])
{
case "state":
record.Set(fields[i], data["country"] + "_S1");
data["state"] = data["country"] + "_S1";
break;
case "city":
record.Set(fields[i], data["state"] + "_C1");
data["city"] = data["state"] + "_C1";
break;
}
}
}
</script>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
<title>Ext.NET Examples</title>
<link href="/resources/css/examples.css" rel="stylesheet" />
<script>
var selectedVal = "C1";
var beforeEdit = function (ed, e) {
var field = this.getEditor(e.record, e.column).field;
switch (e.field) {
case "state":
field.allQuery = e.record.get('country');
break;
case "city":
field.allQuery = e.record.get('state');
break;
}
};
var test = function () {
debugger
return selectedVal;
};
var selectedRow = function (a, b) {
debugger
selectedVal = b.data.country;
};
var show = function () {
if (selectedVal != null) {
Ext.getCmp("FieldSetOne").show();
}
else {
Ext.Msg.alert('Error', 'Please select a record within the data grid before selecting Popup')
}
};
var hide = function () {
Ext.getCmp("FieldSetOne").hide();
};
</script>
</head>
<body>
<form id="Form1" runat="server">
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<ext:Store ID="CountryStore" runat="server">
<Model>
<ext:Model ID="Model1" runat="server">
<Fields>
<ext:ModelField Name="text" Type="String" ServerMapping="Text" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
<ext:Store ID="StateStore" runat="server" OnReadData="StatesRefresh">
<Proxy>
<ext:PageProxy />
</Proxy>
<Model>
<ext:Model ID="Model2" runat="server">
<Fields>
<ext:ModelField Name="text" Type="String" ServerMapping="Text" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
<ext:Store ID="CityStore" runat="server" OnReadData="CitiesRefresh">
<Proxy>
<ext:PageProxy />
</Proxy>
<Model>
<ext:Model ID="Model3" runat="server">
<Fields>
<ext:ModelField Name="text" Type="String" ServerMapping="Text" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
<ext:GridPanel
ID="GridPanel1"
runat="server"
Height="300"
Width="600"
Title="Grid"
ForceFit="true">
<Store>
<ext:Store ID="Store1" runat="server">
<Model>
<ext:Model ID="Model5" runat="server">
<Fields>
<ext:ModelField Name="country" Type="String" ServerMapping="Country" />
<ext:ModelField Name="state" Type="String" ServerMapping="State" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
</Store>
<ColumnModel>
<Columns>
<ext:Column ID="Column1" runat="server" DataIndex="country" Text="Country">
<Editor>
<ext:ComboBox
ID="CountryCombo"
runat="server"
QueryMode="Local"
TriggerAction="All"
StoreID="CountryStore"
ValueField="text"
DisplayField="text">
</ext:ComboBox>
</Editor>
</ext:Column>
<ext:Column ID="Column2" runat="server" DataIndex="state" Text="State">
<Editor>
<ext:ComboBox
ID="StateCombo"
runat="server"
StoreID="StateStore"
ValueField="text"
DisplayField="text">
<CustomConfig>
<ext:ConfigItem Name="initQuery" Value="Ext.emptyFn" Mode="Raw" />
</CustomConfig>
</ext:ComboBox>
</Editor>
</ext:Column>
</Columns>
</ColumnModel>
<TopBar>
<ext:Toolbar ID="Toolbar1" runat="server">
<Items>
<ext:Button ID="Button1"
runat="server"
Text="Popup">
<Listeners>
<Click Handler="show()">
</Click>
</Listeners>
</ext:Button>
</Items>
</ext:Toolbar>
</TopBar>
<Plugins>
<ext:RowExpander ID="RowExpander1" runat="server">
<Component>
<ext:GridPanel
ID="GridPanel2"
runat="server"
Height="300"
Width="600"
Title="Grid"
ForceFit="true">
<Store>
<ext:Store ID="Store2" runat="server">
<Model>
<ext:Model ID="Model6" runat="server">
<Fields>
<ext:ModelField Name="city" Type="String" ServerMapping="City" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
</Store>
<ColumnModel>
<Columns>
<ext:Column ID="Column3" runat="server" DataIndex="city" Text="City">
<Editor>
<ext:ComboBox
ID="CityCombo"
runat="server"
QueryMode="Remote"
StoreID="CityStore"
ValueField="text"
DisplayField="text">
<CustomConfig>
<ext:ConfigItem Name="initQuery" Value="Ext.emptyFn" Mode="Raw" />
</CustomConfig>
</ext:ComboBox>
</Editor>
</ext:Column>
</Columns>
</ColumnModel>
<Plugins>
<ext:CellEditing>
<Listeners>
<BeforeEdit Fn="beforeEdit" />
</Listeners>
<DirectEvents>
<Edit OnEvent="Edit" Before="return e.value !== e.originalValue;">
<EventMask ShowMask="true" Target="CustomTarget" CustomTarget="App.GridPanel2" />
<ExtraParams>
<ext:Parameter Name="field" Value="e.field" Mode="Raw" />
<ext:Parameter Name="index" Value="e.rowIdx" Mode="Raw" />
<ext:Parameter Name="record" Value="e.record.data" Mode="Raw" Encode="true" />
</ExtraParams>
</Edit>
</DirectEvents>
</ext:CellEditing>
</Plugins>
</ext:GridPanel>
</Component>
</ext:RowExpander>
<ext:CellEditing>
<Listeners>
<BeforeEdit Fn="beforeEdit" />
</Listeners>
<DirectEvents>
<Edit OnEvent="Edit" Before="return e.value !== e.originalValue;">
<EventMask ShowMask="true" Target="CustomTarget" CustomTarget="App.GridPanel1" />
<ExtraParams>
<ext:Parameter Name="field" Value="e.field" Mode="Raw" />
<ext:Parameter Name="index" Value="e.rowIdx" Mode="Raw" />
<ext:Parameter Name="record" Value="e.record.data" Mode="Raw" Encode="true" />
</ExtraParams>
</Edit>
</DirectEvents>
</ext:CellEditing>
</Plugins>
<SelectionModel>
<ext:RowSelectionModel ID="rowSelectionModel" Mode="Single">
<Listeners>
<Select Fn="selectedRow"></Select>
</Listeners>
</ext:RowSelectionModel>
</SelectionModel>
</ext:GridPanel>
<ext:FieldSet runat="server" Hidden="true" ID="FieldSetOne" Floating="true">
<Items>
<ext:DisplayField runat="server" FieldLabel="Label1" ID="Label1" Name="Label1">
<Renderer Fn="test">
</Renderer>
</ext:DisplayField>
<ext:Button ID="Button2"
runat="server"
Text="Close">
<Listeners>
<Click Handler="hide()">
</Click>
</Listeners>
</ext:Button>
</Items>
<Listeners></Listeners>
</ext:FieldSet>
</form>
</body>
</html>