Here is our contol:
public class FvGridPanelEditable : GridPanel
{
public new class Builder<TGridPanelEditable, TBuilder> : GridPanel.Builder<TGridPanelEditable, TBuilder>
where TGridPanelEditable : GridPanel
where TBuilder : Builder<TGridPanelEditable, TBuilder>
{
public Builder(TGridPanelEditable component)
: base(component)
{
component.Load += (sender, args) => BuildGrid();
}
private bool _isInit;
private readonly Store _store = new Store();
private string _action = "";
private bool _rightAdd;
private bool _rightDelete;
private string _gridId = ControllerHelper.CreateUnqiueid();
private readonly IList<ColumnBase> _columns = new List<ColumnBase>();
private readonly IList<StoreParameter> _storeParameters = new List<StoreParameter>();
/// <summary>
/// ID GridPanel
/// </summary>
public override TBuilder ID(string id)
{
_gridId = id;
return base.ID(id);
}
/// <summary>
/// Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°
/// </summary>
/// <param name="actionName">Ð˜Ð¼Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ð»ÐµÑ€Ð° на котором лежит ReadData</param>
/// <param name="userId">Use Method ControllerHelper.GetUserId(Session)</param>
/// <param name="brRightObject">BrRight object</param>
public TBuilder FvInit(string actionName, string userId, string brRightObject)
{
_action = actionName;
_rightAdd = !BrRights.UserHasPermissionAdd(userId, brRightObject);
_rightDelete = !BrRights.UserHasPermissionDelete(userId, brRightObject);
_isInit = true;
return this as TBuilder;
}
/// <summary>
/// Колонки Ð´Ð»Ñ Ð³Ñ€Ð¸Ð´Ñ‹
/// </summary>
public TBuilder FvGridColumns(params ColumnBase[] columns)
{
foreach (var column in columns)
_columns.Add(column);
return this as TBuilder;
}
/// <summary>
/// Параметр загрузки гриды
/// </summary>
public TBuilder FvAddFilterParameter(string name, string value, ParameterMode parameterMode = ParameterMode.Auto)
{
_storeParameters.Add(new StoreParameter(name, value, parameterMode));
return this as TBuilder;
}
private void BuildGrid()
{
if (!_isInit)
throw new Exception("Сначала необходимо инициализировать гриду вызвав метод FvInit");
_store.Proxy.Add(new AjaxProxy { Url = UrlHelper.Action(_action) });
var proxy = ((AjaxProxy)_store.Proxy.Primary);
proxy.Reader.Add(new JsonReader { RootProperty = "data" });
var model = new Model();
foreach (var columnBase in _columns)
{
if (columnBase is DateColumn)
model.Fields.Add(columnBase.DataIndex, ModelFieldType.Date);
else
model.Fields.Add(columnBase.DataIndex, ModelFieldType.Auto);
}
_store.PageSize = 15;
_store.RemoteFilter = true;
_store.RemotePaging = true;
_store.RemoteSort = true;
_store.Model.Add(model);
_store.AutoLoad = true;
_store.ID = ControllerHelper.CreateUnqiueid();
BuildStoreParameters();
ID(_gridId);
Header(false);
Region(Ext.Net.Region.Center);
Layout(LayoutType.Fit);
EnableColumnHide(false);
Store(_store);
//Добавление колонок на гриду
foreach (var column in _columns)
ColumnModel(column);
Plugins(new GridFilters { MenuFilterText = "Фильтр", });
Plugins(new CellEditing { ClicksToEdit = 1 });
View(new GridView { StripeRows = true });
SelectionModel(new CellSelectionModel());
BottomBar(new PagingToolbar());
//Добавление кнопок редактированиÑ
BuildTopBarButtons();
}
private void BuildTopBarButtons()
{
var toolBar = new Toolbar();
toolBar.Items.Add(new ToolbarFill());
var btnDelete = new Button
{
Text = "Удалить",
Handler = String.Format("var stor = App.{0}.store; var record = App.{0}.selModel.getSelection(); stor.remove(record)", _gridId),
Disabled = _rightDelete,
Icon = Ext.Net.Icon.Delete
};
var btnAdd = new Button
{
Text = "Добавить",
Handler = String.Format("App.{0}.store.add({{}});" +
"Ext.Function.defer(function() {{" +
"App.{0}.editingPlugin.startEditByPosition({{row: App.{0}.items.length - 1, column: 0}})" +
"}}, 100)", _gridId),
Icon = Ext.Net.Icon.Add,
Disabled = _rightAdd
};
toolBar.Items.Add(btnAdd);
toolBar.Items.Add(btnDelete);
TopBar(toolBar);
}
private void BuildStoreParameters()
{
_store.Parameters.AddRange(_storeParameters);
}
}
public new class Builder : Builder<FvGridPanelEditable, Builder>
{
public Builder(FvGridPanelEditable component) : base(component) { }
}
}
Here is control using:
x.FvGridPanelEditable()
.FvInit("GetWorkTime", ControllerHelper.GetUserId(Session), BrRights.ObjSdkServiceGroup)
.FvGridColumns(
FvGridColumnDescription.GetStringColumn("WeekDayId", "День недели")
.FvAddComboboxEditor(new FvEditorComboBoxConfig("GetWeekDays", "Name", "Id")).Width(200),
FvGridColumnDescription.GetDateColumn("PeriodStart", "Период работы Ñ", false).Format("H:mm").Editor(x.TimeField()),
FvGridColumnDescription.GetDateColumn("PeriodEnd", "Период работы по", false).Format("H:mm").Editor(x.TimeField())
)
.FvAddFilterParameter("serviceGroupId", "App.Id.getValue()", ParameterMode.Raw)
.ID("grdWorkTime")
This code on client that create this truble:
Handler = String.Format("App.{0}.store.add({{}});" +
"Ext.Function.defer(function() {{" +
"App.{0}.editingPlugin.startEditByPosition({{row: App.{0}.items.length - 1, column: 0}})" +
"}}, 100)", _gridId)