上一篇给F增加了扩展,后台生成了三个按钮放到了F.Toolbar().Items()中,今天把前台触发方法写好,让生成的按钮用起来
导言
上一篇给F增加了扩展,后台生成了三个按钮放到了F.Toolbar().Items()中,今天把前台触发方法写好,让生成的按钮用起来
在这之前要定义新增修改删除按钮都干什么,我习惯于把修改页面单独用F.Window控件弹出,然后用url传值把选中的ID传到编辑页面,所以,新增就是弹出空页面(不传参数),修改就弹出页面(传选中的ID),删除按钮直接触发后台方法,前台就用F.doPostBack(url, {});
1. 为Grid扩展一个Window
单独一个Window控件?当然不需要,Grid自带一个window是我想要的,要用一行代码就建一个Window控件,前台要这样:
.EditWindow(@Url.Content("~/Grid/GridEdit"), 450, 350, "表格1修改")
我只要制定URL,大小,标题,就足够了,为F.Grid扩展,鼠标点击F.Grid()按F12,飞,这次没有重载
//
// 摘要:
// 表格控件扩展
public GridExtension Grid();
GridExtension就是这个,为他做扩展:
/// <summary>
/// 为Grid 增加 窗体
/// </summary>
/// <param name="f"></param>
/// <param name="url">修改页面的地址</param>
/// <param name="width">宽</param>
/// <param name="height">高</param>
public static GridExtension EditWindow(this GridExtension f, string url, int width, int height)
{}
Window控件作为属性动态输出,我选择js,所以Window的显示需要扩展F.Grid,这回是js扩展:
if (F.Grid) {
$.extend(F.Grid.prototype, {
editWidth: 800,//修改窗口的宽
editHeight: 650,//修改窗口的高
editTitle: "编辑",//修改窗口的标题
//显示编辑页面
showEdit: function (b, data, title, w, h) {
var t = this;
//默认属性
var editurl = F.ui[t.id].editurl;
title = title || t.editTitle;
w = w || t.editWidth;
h = h || t.editHeight;
//没有地址返回
if (!editurl) { return; }
//增加随机参数
if (editurl.indexOf('?') < 0) {
editurl += "?_reg=" + Math.random();
}
//是否验证选择项
if (b) {
var selectids = F.ui[t.id].getSelectedRows();
if (selectids.length != 1) {
notifyEx("请选择一行进行编辑");
return;
}
//将选择的id作为参数拼接
editurl += "&id=" + selectids[0];
}
//其他的参数 [a=x,b=x]
if (data) {
if ($.isArray(data)) {
for (var d in data) {
editurl += "&" + d;
}
} else {
editurl += "&" + data;
}
}
//执行显示
F.ui[t.id + 'GridEdit'].show(editurl, title, w, h);
}
});
}
js执行F.ui.Grid.showEdit() 就可以了。下面补齐FineUIEx.cs,注意EditWindow方法的多中重载,满足不同场景
/// <summary>
/// 为Grid 增加 窗体
/// </summary>
/// <param name="f"></param>
/// <param name="b">是否启用修改页面</param>
/// <param name="url">修改页面地址</param>
private static GridExtension EditWindow(this GridExtension f, bool b, string url)
{
StringBuilder str = new StringBuilder();
if (b)
{
str.Append("F.appendFormNode('<div class=\"f-window-wrap\" id=\"" + f.Source.ID + "GridEdit_wrapper\"></div>');");
str.Append("new F.Window({");
str.Append("id: '" + f.Source.ID + "GridEdit',");
str.Append("renderTo: '#" + f.Source.ID + "GridEdit_wrapper',");
str.Append("hidden: true,");
str.Append("width: 1000,");
str.Append("height: 600,");
str.Append("iframe: true,");
str.Append("title: '编辑',");
str.Append("iconFont: 'edit',");
str.Append("resizable: true,");
str.Append("target: '_self',");
str.Append("maximizable: true,");
str.Append("closeAction: 'hide'");
str.Append("});");
}
if (!string.IsNullOrEmpty(url))
{
str.Append("F.ui." + f.Source.ID + ".editurl = '" + url + "';");
}
PageContext.RegisterStartupScript(str.ToString());
return f;
}
/// <summary>
/// 为Grid 增加 窗体
/// </summary>
/// <param name="f"></param>
/// <param name="b"></param>
public static GridExtension EditWindow(this GridExtension f, bool b)
{
return f.EditWindow(true, "");
}
/// <summary>
/// 为Grid 增加 窗体
/// </summary>
/// <param name="f"></param>
/// <param name="url">修改页面的地址</param>
public static GridExtension EditWindow(this GridExtension f, string url)
{
return f.EditWindow(true, url);
}
/// <summary>
/// 为Grid 增加 窗体
/// </summary>
/// <param name="f"></param>
/// <param name="url">修改页面的地址</param>
/// <param name="width">宽</param>
/// <param name="height">高</param>
public static GridExtension EditWindow(this GridExtension f, string url, int width, int height)
{
StringBuilder str = new StringBuilder();
str.Append("F.ui." + f.Source.ID + ".editWidth=" + width + ";");
str.Append("F.ui." + f.Source.ID + ".editHeight=" + height + ";");
PageContext.RegisterStartupScript(str.ToString());
return f.EditWindow(true, url);
}
/// <summary>
/// 为Grid 增加 窗体
/// </summary>
/// <param name="f"></param>
/// <param name="url">修改页面的地址</param>
/// <param name="width">宽</param>
/// <param name="height">高</param>
public static GridExtension EditWindow(this GridExtension f, string url, int width, int height,string title)
{
StringBuilder str = new StringBuilder();
str.Append("F.ui." + f.Source.ID + ".editWidth=" + width + ";");
str.Append("F.ui." + f.Source.ID + ".editHeight=" + height + ";");
str.Append("F.ui." + f.Source.ID + ".editTitle='" + title + "';");
PageContext.RegisterStartupScript(str.ToString());
GridExtension gex = f.EditWindow(true, url);
return gex;
}
2. 按钮触发实现
有了编辑窗口,下面写js方法为让按钮触发就行了,新增修改弹出编辑窗口,代码如下
//新增 修改 删除 由后台自动引用,通过传入的GirdID执行前台或者后台方法
//新增
GridAdd_click = function (gridid) {
//下回说这句
eval("var fun;try{fun=" + gridid + "new_Click;}catch(ex){}");
if (fun) {
fun(F.ui[gridid]);
} else {
//显示
F.ui[gridid].showEdit();
}
};
//修改
GridEdit_click = function (gridid) {
//下回说这句
eval("var fun;try{fun=" + gridid + "edit_Click;}catch(ex){}");
//得到选择的ID 判断
var selectids = F.ui[gridid].getSelectedRows();
if (selectids.length != 1) {
notifyEx("请选择一行进行编辑");
return;
}
if (fun) {
fun(F.ui[gridid], selectids[0]);
} else {
//显示
F.ui[gridid].showEdit(true);
}
}
//删除 这里要注意,删除的url要从程序传 后台需要有删除方法 gridid + 'Del_Click' 命名
GridDel_click = function (pburl, gridid) {
eval("var fun;try{fun=" + gridid + "delete_Click;}catch(ex){}");
var selectids = F.ui[gridid].getSelectedRows();
if (selectids.length == 0) {
notifyEx("请选择一行进行编辑");
return;
}
confirmEx("是否删除选中项", function () {
if (fun) {
fun(F.ui[gridid], selectids);
} else {
F.doPostBack(pburl + "/" + gridid + 'Del_Click', {
id: selectids,
fields: F.ui[gridid].fields
});
}
});
}
将DefaultGridBtn方法补齐,实现触发前台的js
/// <summary>
/// 返回默认Grid增删改按钮的默认配置 参数(GridID,增加的其他按钮)
/// new_Click edit_Click delete_Click
/// </summary>
/// <param name="F"></param>
/// <param name="gridid"></param>
/// <param name="items"></param>
/// <returns></returns>
public static ControlBase[] DefaultGridBtn(this UIExtension<dynamic, dynamic> F, string gridid, params IControlBaseExtension[] items)
{
//var F = new UIExtension<dynamic, dynamic>();
List<ControlBase> DefaultBtn = new List<ControlBase>();
var v = F.Button().ID(gridid + "new").Text("新增").OnClientClick("GridAdd_click('" + gridid + "')").IconFont(IconFont.Plus).Source;
DefaultBtn.Add(v);
v = F.Button().ID(gridid + "edit").Text("修改").OnClientClick("GridEdit_click('" + gridid + "')").IconFont(IconFont.Pencil).Source;
DefaultBtn.Add(v);
string url = ((Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest)((Microsoft.AspNetCore.Http.DefaultHttpContext)((Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper)F.CurrentHtmlHelper).ViewContext.HttpContext).Request).Path;
v = F.Button().ID(gridid + "delete").OnClientClick("GridDel_click('" + url + "','" + gridid + "')").Text("删除").IconFont(IconFont.Minus).Source;
DefaultBtn.Add(v);
foreach (var t in items)
{
DefaultBtn.Add(t.Source);
}
return DefaultBtn.ToArray();
}
/// <summary>
/// 返回默认Grid增删改按钮的默认配置 参数(GridID,增加的其他按钮)
/// new_Click edit_Click delete_Click
/// </summary>
/// <param name="f"></param>
/// <param name="gridid"></param>
/// <param name="items"></param>
/// <returns></returns>
public static ControlBase[] DefaultBeforGridBtn(this UIExtension<dynamic, dynamic> f, string gridid, params IControlBaseExtension[] items)
{
var F = new UIExtension<dynamic, dynamic>();
List<ControlBase> DefaultBtn = new List<ControlBase>();
foreach (var t in items)
{
DefaultBtn.Add(t.Source);
}
var v = F.Button().ID(gridid + "new").Text("新增").OnClientClick("GridAdd_click('" + gridid + "')").IconFont(IconFont.Plus).Source;
DefaultBtn.Add(v);
string url =((Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest)((Microsoft.AspNetCore.Http.DefaultHttpContext)((Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper)f.CurrentHtmlHelper).ViewContext.HttpContext).Request).Path;
v = F.Button().ID(gridid + "edit").Text("修改").OnClientClick("GridEdit_click('" + gridid + "')").IconFont(IconFont.Pencil).Source;
DefaultBtn.Add(v);
v = F.Button().ID(gridid + "delete").OnClientClick("GridDel_click('" + url + "','" + gridid + "')").Text("删除").IconFont(IconFont.Minus).Source;
DefaultBtn.Add(v);
return DefaultBtn.ToArray();
}
具体效果,可以在FineUIMVC扩展中查看。