Let me know whether it suits your needs.
<script runat="server">
public class Entity
{
public int ID { get; set; }
public string Name { get; set; }
public float Salary { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
List<Entity> lst = new List<Entity>();
for (int index = 1; index < 16; index++)
{
lst.Add(new Entity
{
ID = index,
Name = string.Format("Name - {0}", index),
Salary = index * 1000
});
}
Store store = this._grd.GetStore();
store.DataSource = lst;
store.DataBind();
}
}
</script>
<!DOCTYPE html>
<html>
<head runat="server">
<script type="text/javascript">
var AnalyzeData = function () {
var grid = App._grd;
var records = grid.getStore().data.map;
for (var recordID in records) {
AnalyzeSalary(records[recordID])
}
grid.getView().refresh();
}
var OnEdit = function (item, e) {
e.record.commit();
AnalyzeSalary(e.record);
App._grd.getView().refresh();
}
var PrepareToolbar = function (grid, toolbar, rowIndex, record) {
var btn = toolbar.items.get(0);
if (!Ext.isEmpty(record.data.Error)) {
btn.setHidden(false);
}
else {
btn.setHidden(true);
}
};
var AnalyzeSalary = function (record) {
record.data.Error = null;
if (record.data.Salary >= 12000) {
record.data.Error = "Contact Chief Human Resources Officer";
}
else if (record.data.Salary >= 8000) {
record.data.Error = "Contact Human Resources";
}
}
var AddEmployee = function () {
var grid = App._grd;
grid.editingPlugin.cancelEdit();
var recordID = grid.getStore().getTotalCount() + 1;
grid.store.add({ ID: recordID, Name: Ext.String.format('Name - {0}', recordID), Salary: recordID * 1000 });
var recordFromStore = grid.getStore().data.map[recordID];
AnalyzeSalary(recordFromStore);
grid.getView().focusRow(recordFromStore);
grid.getSelectionModel().select(recordFromStore);
};
var RemoveEmployee = function () {
var grid = App._grd;
var selectionModel = grid.getSelectionModel();
grid.editingPlugin.cancelEdit();
grid.store.remove(selectionModel.getSelection());
};
</script>
</head>
<body>
<ext:ResourceManager Locale="en" runat="server" />
<ext:GridPanel ID="_grd" Width="600" Height="550" Border="true" Title="Employees" runat="server">
<Store>
<ext:Store AutoLoad="true" runat="server">
<Model>
<ext:Model IDProperty="ID" runat="server">
<Fields>
<ext:ModelField Name="ID" Type="Int" />
<ext:ModelField Name="Name" Type="String" />
<ext:ModelField Name="Salary" Type="Float" />
<ext:ModelField Name="Error" Type="String" />
</Fields>
</ext:Model>
</Model>
<Listeners>
<Load Handler="AnalyzeData();" />
</Listeners>
</ext:Store>
</Store>
<Plugins>
<ext:RowEditing ClicksToMoveEditor="1" AutoCancel="false" runat="server">
<Listeners>
<Edit Fn="OnEdit" />
</Listeners>
</ext:RowEditing>
</Plugins>
<TopBar>
<ext:Toolbar runat="server">
<Items>
<ext:Button Text="Add Employee" Icon="UserAdd" runat="server">
<Listeners>
<Click Fn="AddEmployee" />
</Listeners>
</ext:Button>
<ext:Button ID="btnRemoveEmployee" Text="Remove Employee" Icon="UserDelete" Disabled="true" runat="server">
<Listeners>
<Click Fn="RemoveEmployee" />
</Listeners>
</ext:Button>
</Items>
</ext:Toolbar>
</TopBar>
<ColumnModel>
<Columns>
<ext:Column Text="ID" DataIndex="ID" runat="server" />
<ext:Column Text="Name" DataIndex="Name" Flex="1" runat="server">
<Editor>
<ext:TextField AllowBlank="false" runat="server" />
</Editor>
</ext:Column>
<ext:NumberColumn Text="Salary" DataIndex="Salary" Format="$0,0" runat="server">
<Editor>
<ext:NumberField AllowBlank="false" MinValue="1" MaxValue="150000" runat="server" />
</Editor>
</ext:NumberColumn>
<ext:CommandColumn Width="23" runat="server">
<Commands>
<ext:GridCommand CommandName="analysis" Icon="Cross" />
</Commands>
<PrepareToolbar Fn="PrepareToolbar" />
<Listeners>
<Command Handler="Ext.Msg.alert('Information', record.data.Error);" />
</Listeners>
</ext:CommandColumn>
</Columns>
</ColumnModel>
<SelectionModel>
<ext:CheckboxSelectionModel runat="server" Mode="Multi" />
</SelectionModel>
<BottomBar>
<ext:PagingToolbar runat="server" />
</BottomBar>
<Listeners>
<SelectionChange Handler="#{btnRemoveEmployee}.setDisabled(!selected.length);" />
</Listeners>
</ext:GridPanel>
</body>
</html>