You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1304 lines
55 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/// <reference path="../Scripts/MicrosoftAjax.js" />
/// <reference path="../Scripts/jquery.min.js" />
/// <reference path="../Scripts/jquery.easyui.min.js" />
/// <reference path="../Scripts/FixTable.js" />
/// <reference path="../Scripts/DataPager.js" />
Type.registerNamespace("nblf.ui");
Sys.CultureInfo.CurrentCulture.numberFormat.NumberGroupSeparator = "";
//定义枚举
nblf.ui.SelectMode = function () { };
nblf.ui.SelectMode.prototype =
{
None: 0,
SingleRow: 1,
MultiRow: 2,
RadioButton: 3,
CheckBox: 4
}
nblf.ui.SelectMode.registerEnum("nblf.ui.SelectMode");
nblf.ui.DataGridColumn = function () {
this.Width = ""; //不设宽度
this.Align = ""; //文字对齐
this.Style = "";
this.HeaderText = ""; //页眉文本
this.SortExpression = ""; //排序字段
// this.AllowEdit = false; //是否启用编辑模式(不编辑时会以span元素显示单击span会替换成需要显示的控件)
this.CellTemplate = ""; //自定义行单元格模板,内容值用{Bind 列名,格式化}代替,初始化时会替换
this.CellFormatter = null;
//#region 创建Span模板列
this.CreateFieldSpan = function (FieldName, FormatString) {
var BindString = FieldName;
if (FormatString != "") BindString += "," + FormatString;
this.CellTemplate = "<span ColName='" + FieldName + "' class='FieldSpan' style='width:100%;text-align: center;'>{Bind " + BindString + "}</span>";
}
//#endregion
//#region 超链接模板列
this.CreateFieldHyperLink = function (FieldName, FormatString, url, target) {
// Array.add(this.DataField,FieldName);
// Array.add(this.DataField,FieldUrl);
var BindString = FieldName;
if (FormatString != "") BindString += "," + FormatString;
if (FormatString != "") BindString += "," + FormatString;
this.CellTemplate = "<a ColName='" + FieldName + "' class='FieldHyperLink' target='" + target + "' href='" + url + "' >{Bind " + BindString + "}</a>";
}
//#endregion
//#region 图片列
this.CreateFieldImage = function (FieldName, height, width) {
this.CellTemplate = "<img alt='' style='height:" + height + ";width:" + width + ";' src='{Bind " + FieldName + "}'></img>";
}
//#endregion
//#region 数字输入列绑定用
this.CreateFieldNumberSpinner = function (FieldName, FormatString, min, max, increment) {
var BindString = FieldName;
if (FormatString != "") BindString += "," + FormatString;
this.CellTemplate = "<input class='easyui-numberspinner' style='width:100%;text-align: center;' ColName='" + FieldName + "' min='" + min + "' max=" + max + " increment=" + increment + " value='{Bind " + BindString + "}'></input>";
}
//#endregion
//#region 数字输入列
this.CreateNumberSpinner = function (name, defaultValue, min, max, increment) {
this.CellTemplate = "<input name='" + name + "' style='width:100%;text-align: center;' min='" + min + "' max=" + max + " increment=" + increment + " class='easyui-numberspinner' value='" + defaultValue + "'></input>";
}
//#endregion
//#region 创建文本框模板列
this.CreateFieldTextBox = function (FieldName, FormatString) {
// Array.add(this.DataField,FieldName);
var BindString = FieldName;
if (FormatString != "") BindString += "," + FormatString;
this.CellTemplate = "<input ColName='" + FieldName + "' class='FieldTextBox' type='text' style='width:100%;text-align: center;' value='{Bind " + BindString + "}'></input>";
}
//#endregion
//#region 创建普通文本框列带name属性,便于查找控件
this.CreateTextBox = function (name, defaultValue) {
this.CellTemplate = "<input type='text' name='" + name + "' class='TextBox' style='width:100%;text-align: center;' value='" + defaultValue + "'></input>";
}
//#endregion
//#region 创建密码文本框模板列
this.CreateFieldPassWord = function (FieldName) {
// Array.add(this.DataField,FieldName);
this.CellTemplate = "<input ColName='" + FieldName + "' class='FieldPassWord' type='password' style='width:100%;text-align: center;' value='{Bind " + FieldName + "}'></input>";
}
//#endregion
//#region 创建普通密码文本框列带name属性,便于查找控件
this.CreateTextBox = function (name, defaultValue) {
this.CellTemplate = "<input type='password' name='" + name + "' class='PassWord' style='width:100%;text-align: center;' value='" + defaultValue + "'></input>";
}
//#endregion
//#region 创建CheckBox模板列
this.CreateFieldCheckBox = function (FieldName, Enabled) {
// Array.add(this.DataField,FieldName);
var ss = "disabled";
if (Enabled == true) ss = "";
this.CellTemplate = "<input type='checkbox' ColName='" + FieldName + "' style='width:100%;text-align: center;' checked='{Bind " + FieldName + "}' " + ss + "></input>";
}
//#endregion
//#region 创建CheckBox
this.CreateCheckBox = function (name, defaultValue) {
this.CellTemplate = "<input type='checkbox' name='" + name + "' style='width:100%;text-align: center;' checked='" + defaultValue + "'></input>";
}
//#endregion
//#region 创建radio模板列
this.CreateFieldRadio = function (FieldName) {
// Array.add(this.DataField,FieldName);
this.CellTemplate = "<input ColName='" + FieldName + "' type='radio' style='width:100%;text-align: center;' checked='{Bind " + FieldName + "}' ></input>";
}
//#endregion
//#region 创建radio
this.CreateRadio = function (name, defaultValue) {
this.CellTemplate = "<input type='radio' name='" + name + "' style='width:100%;text-align: center;' checked='" + defaultValue + "'></input>";
}
//#endregion
//#region 创建textarea模板列
this.CreateFieldMultTextBox = function (FieldName, height) {
// Array.add(this.DataField,FieldName);
this.CellTemplate = "<textarea ColName='" + FieldName + "' style='width:100%;height:" + height + ";' >{Bind " + FieldName + "}</textarea>";
}
//#endregion
//#region 创建textarea模板列
this.CreateMultiTextBox = function (name, defaultValue, height) {
this.CellTemplate = "<textarea name='" + name + "' style='width:100%;height:" + height + ";' >" + defaultValue + "</textarea>";
}
//#endregion
//#region 创建select下拉框列ListArray必须是一个数组对象拥有二个属性text和value
this.CreateFieldDropDownList = function (FieldName, FieldValue, ListArray) {
// Array.add(this.DataField,FieldName);
this.CellTemplate = "<select ColName='" + FieldName + "' FieldValue='{Bind " + FieldValue + "}' style='width:100%;' >";
for (var i = 0; i < ListArray.length; i++) {
this.CellTemplate += "<option value='" + ListArray[i].value + "'>" + ListArray[i].text + "</option>";
}
this.CellTemplate += "</select>";
}
//#endregion
//#region 创建select下拉框列ListArray必须是一个数组对象拥有二个属性text和value
this.CreateFieldDropDownList2 = function (FieldName, FieldValue, ListArray) {
// Array.add(this.DataField,FieldName);
this.CellTemplate = "<select ColName='" + FieldName + "' FieldValue='{Bind " + FieldValue + "}' style='width:100%;' >";
for (var i = 0; i < ListArray.length; i++) {
this.CellTemplate += "<option value='" + ListArray[i].ID + "'>" + ListArray[i].Name + "</option>";
}
this.CellTemplate += "</select>";
}
//#endregion
//#region 创建select下拉框列
this.CreateDropDownList = function (name, ListArray) {
this.CellTemplate = "<select name='" + name + "' style='width:100%;' >";
for (var i = 0; i < ListArray.length; i++) {
this.CellTemplate += "<option value='" + ListArray[i].value + "'>" + ListArray[i].text + "</option>";
}
this.CellTemplate += "</select>";
}
//#endregion
}
nblf.ui.DataGridColumn.registerClass("nblf.ui.DataGridColumn", null);
nblf.ui.DataGrid = function (divid) {
this.ParentElement = $(document); //要加入的父容器
this.id = divid;
this.ApplicationPath = "";
this.AllowPaging = false; //是否启用分页
this.Columns = new Array(); //列集合
this.DataSource = new Array(); //接受一个数组对象
this.FixLeftColumns = 0; //左固定N列
this.SelectMode = nblf.ui.SelectMode.None; //枚举
this.ShowIndexColumn = false; //是否显示行号
this.IsFixHeader = false; //是否固定表头
this.Width = ""; //宽度
this.Height = ""; //高度
this.TableWidth = "100%"; //table宽度
this.IsHoverColor = true; //是否启用移入移出变色
this.RightMenu = ""; //右键菜单对象ID
this.LeftMenu = ""; //左键菜单对象ID
this.DataKeyName = ""; //主键名称
this.TableID = this.id + "_Table";
this.DivTableID = this.id + "_DivTable";
this.PageID = this.id + "_Page";
this.DataPager = new DataPager(this.PageID); //分页控件
this.DataPager.ParentElement = this.ParentElement;
this.SortingID = this.id + "_DivSorting";
this.ShowHeader = true; //是否显示表头
this.ListSorting = new Array(); //排序列表接受text,value二个字段的对象
this.SortExpression = ""; //当前排序字段名称
this.ViewSortDirection = ""; //排序状态asc或是desc
// this.DataPager.Parent = this;
this.PaperModel = 0; //分页模式(0默认模式从数据库分页1内存分页)
var JavaDataTable = null;
var EventHandler = new Sys.EventHandlerList();
var My = this;
//#region 对象数组转换成JavaDataTable
this.GetJavaDataTable = function () {
if (JavaDataTable == null) return null;
var index = 0;
$(My.DataSource).each(function () {
var ColIndex = 0;
var row = this;
$(JavaDataTable.Columns).each(function () {
JavaDataTable.Rows[index].ItemArray[ColIndex] = row[this.ColumnName];
ColIndex++;
});
});
}
//#endregion
//#region 新增行
this.Add_Row = function (model) {
Array.add(this.DataSource, model);
var html = new Sys.StringBuilder();
CreateRow(html, model, this.DataSource.length - 1);
$("#" + this.TableID).append(html.toString());
}
//#endregion
//#region 新增行
this.Add_NewRow = function () {
model = new Object();
$(My.Columns).each(function () {
var ColName = $(this.CellTemplate).attr("ColName");
model[ColName] = "";
});
Array.add(this.DataSource, model);
var html = new Sys.StringBuilder();
CreateRow(html, model, this.DataSource.length - 1);
$("#" + this.TableID).append(html.toString());
}
//#endregion
//#region 删除行
this.Del_Row = function (RowIndex) {
//if (this.PaperModel == 0) {
UpdateSource();
Array.removeAt(My.DataSource, RowIndex);
//} else {
// var index = (this.DataPager.PageIndex - 1) * this.DataPager.PageSize + parseInt(RowIndex);
// Array.removeAt(My.DataSource, index);
//}
RefshDataSource();
}
//#endregion
//#region 按行焦点导航
this.NavigationRow = function () {
var fixtable;
if (My.IsFixHeader == false) {
fixtable = $("#" + My.TableID, My.ParentElement);
} else {
fixtable = $("#_fixTableMain", My.ParentElement);
}
var rows = fixtable.find("tr[name='DataGridRow']");
if (rows.length == 0) return;
var tabindex = 1;
$(rows).each(function () {
$(this).find(":text:enabled[IsTab!='false']").each(function () {
$(this).attr("tabindex", tabindex);
tabindex++;
});
});
fixtable.find(":text:enabled[IsTab!='false']", My.ParentElement).keydown(function (event) {
var tabindex = parseInt($(this).attr("tabindex"));
if (event.keyCode == 13) {
var textbox = fixtable.find(":text[tabindex='" + (tabindex + 1) + "']");
if (textbox.length > 0) {
textbox.focus();
}
else {
OnTabFocusEnd();
}
}
else if (event.keyCode == 37) {
//左
var tr = $(this).parentsUntil("tr").parent();
tr.find(":text:enabled[IsTab!='false']").each(function () {
var tabindex2 = parseInt($(this).attr("tabindex"));
if (tabindex2 == tabindex - 1) $(this).focus();
});
}
else if (event.keyCode == 38) {
//上
var tr = $(this).parentsUntil("tr").parent();
var len = tr.find(":text[IsTab!='false']").length;
var textbox = fixtable.find(":text[tabindex='" + (tabindex - len) + "']");
if (textbox.length > 0) textbox.focus();
}
else if (event.keyCode == 39) {
//右
var tr = $(this).parentsUntil("tr").parent();
tr.find(":text:enabled[IsTab!='false']").each(function () {
var tabindex2 = parseInt($(this).attr("tabindex"));
if (tabindex2 == tabindex + 1) $(this).focus();
});
}
else if (event.keyCode == 40) {
//下
var tr = $(this).parentsUntil("tr").parent();
var len = tr.find(":text:enabled[IsTab!='false']").length;
var textbox = fixtable.find(":text[tabindex='" + (tabindex + len) + "']");
if (textbox.length > 0) textbox.focus();
}
});
}
//#endregion
//#region 按列焦点导航
this.NavigationCol = function () {
var fixtable;
if (My.IsFixHeader == false) {
fixtable = $("#" + My.TableID, My.ParentElement);
} else {
fixtable = $("#_fixTableMain", My.ParentElement);
}
var rows = fixtable.find("tr[name='DataGridRow']");
if (rows.length == 0) return;
$(rows).each(function (rowIndex) {
$(this).find(":text:enabled[IsTab!='false']").each(function (i) {
$(this).attr("tabindex", i * rows.length + rowIndex + 1);
});
});
fixtable.find(":text").keydown(function (event) {
var tabindex = parseInt($(this).attr("tabindex"));
if (event.keyCode == 13) {
var textbox = fixtable.find(":text[tabindex='" + (tabindex + 1) + "']");
if (textbox.length > 0) {
textbox.focus();
}
else {
OnTabFocusEnd();
}
}
else if (event.keyCode == 37) {
//左
var tr = $(this).parentsUntil("tr").parent();
tr.find(":text:enabled[IsTab!='false']").each(function () {
var tabindex2 = parseInt($(this).attr("tabindex"));
if (tabindex2 == tabindex - rows.length) $(this).focus();
});
}
else if (event.keyCode == 38) {
//上
var textbox = fixtable.find(":text[tabindex='" + (tabindex - 1) + "']");
if (textbox.length > 0) textbox.focus();
}
else if (event.keyCode == 39) {
//右
var tr = $(this).parentsUntil("tr").parent();
tr.find(":text:enabled[IsTab!='false']").each(function () {
var tabindex2 = parseInt($(this).attr("tabindex"));
if (tabindex2 == tabindex + rows.length) $(this).focus();
});
}
else if (event.keyCode == 40) {
//下
var textbox = fixtable.find(":text[tabindex='" + (tabindex + 1) + "']");
if (textbox.length > 0) textbox.focus();
}
});
}
//#endregion
//#region 获取所有行
this.Get_Rows = function () {
var fixtable;
if (My.IsFixHeader == false) {
fixtable = $("#" + My.TableID, My.ParentElement);
} else {
fixtable = $("#_fixTableMain", My.ParentElement);
}
var rows = fixtable.find("tr[name='DataGridRow']");
return rows;
}
//#endregion
//#region 获取行
this.Get_Row = function (RowIndex) {
return $("#" + this.TableID + " tr[index='" + RowIndex + "']", My.ParentElement);
}
//#endregion
//#region 获取行对应数据源对象
this.Get_Model = function (RowIndex) {
return this.DataSource[RowIndex];
}
//#endregion
//#region 获取选择行数据
this.GetSelectListModel = function () {
var rows = null;
if (My.SelectMode == nblf.ui.SelectMode.SingleRow || My.SelectMode == nblf.ui.SelectMode.MultiRow) {
rows = $("#" + this.TableID + " tr[Selected='true']", My.ParentElement);
}
if (My.SelectMode == nblf.ui.SelectMode.RadioButton) {
rows = $("#" + My.TableID + " input[name='SelectRadioButton']:checked", My.ParentElement).parentsUntil("tr").parent();
}
if (this.SelectMode == nblf.ui.SelectMode.CheckBox) {
rows = $("#" + My.TableID + " input[name='SelectCheckBox']:checked", My.ParentElement).parentsUntil("tr").parent();
}
var ListArray = new Array();
$(rows).each(function () {
var rowIndex = $(this).attr("index");
var row = My.DataSource[rowIndex];
Array.add(ListArray, row);
});
return ListArray;
}
//#endregion
//#region 获取选择行
this.Get_SelectRow = function () {
var rows = null;
if (this.SelectMode == nblf.ui.SelectMode.SingleRow || this.SelectMode == nblf.ui.SelectMode.MultiRow) {
rows = $("#" + this.TableID + " tr[Selected='true']", My.ParentElement);
}
if (this.SelectMode == nblf.ui.SelectMode.RadioButton) {
rows = $("#" + this.TableID + " input[name='SelectRadioButton']:checked", My.ParentElement).parentsUntil("tr").parent();
}
if (this.SelectMode == nblf.ui.SelectMode.CheckBox) {
rows = $("#" + this.TableID + " input[name='SelectCheckBox']:checked", My.ParentElement).parentsUntil("tr").parent();
}
return rows;
}
//#endregion
//#region 获取总页数
this.Get_PageIndex = function () {
if (this.DataPager.PageIndex > 1) {
if (this.DataPager.PagerFlag == false) {
this.DataPager.SetPageIndex(1);
}
}
return this.DataPager.PageIndex;
}
//#endregion
//#region 获取每页行数
this.Get_PageSize = function () {
return this.DataPager.PageSize;
}
//#endregion
//#region 全选
this.CheckedSelectAll = function () {
$("#" + My.TableID + "_SelectAll")[0].checked = true;
$("#" + My.TableID + " input[name=SelectCheckBox]").trigger("click");
}
//#endregion
//#region 设置总行数
this.Set_RowCount = function (RowCount) {
this.DataPager.PagerFlag = false;
this.DataPager.RowCount = RowCount;
this.DataPager.MathPageNumber();
}
//#endregion
//#region 取得排序名称
this.Get_SortName = function () {
var SortName = $("#" + this.SortingID + " .easyui-combobox", My.ParentElement).combobox("getValue");
var AscName = $("#" + this.SortingID + " input[checked]", My.ParentElement).val();
if (SortName == "" || SortName == "0") return "";
return SortName + " " + AscName;
}
//#endregion
//#region 设置当前页数
this.SetPageIndex = function (PageIndex) {
My.DataPager.SetPageIndex(PageIndex);
}
//#endregion
//#region 设置当前页数
this.SerPageIndex = function (PageIndex) {
My.DataPager.SetPageIndex(PageIndex);
}
//#endregion
//#region 设置当前页数
this.SetPageSize = function (PageSize) {
try {
My.DataPager.SetPageSize(PageSize);
} catch (e) {
My.DataPager.PageSize = PageSize;
}
}
//#endregion
//#region 焦点回车健导行结束时触发
this.add_TabFocusEnd = function (handler) {
EventHandler.addHandler('TabFocusEnd', handler);
}
//#endregion
//#region 引发点击行事件
function OnTabFocusEnd() {
var h = EventHandler.getHandler('TabFocusEnd');
if (h) h(this, Sys.EventArgs.Empty);
}
//#endregion
//#region 点击行时触发
this.add_RowClick = function (handler) {
EventHandler.addHandler('RowClick', handler);
}
//#endregion
//#region 引发点击行事件
function OnRowClick() {
var h = EventHandler.getHandler('RowClick');
if (h) h(this, Sys.EventArgs.Empty);
}
//#endregion
//#region 点击排序时触发
this.Sorting = function (handler) {
EventHandler.addHandler('Sorting', handler);
}
//#endregion
//#region 点击排序时触发
function OnSorting() {
var h = EventHandler.getHandler('Sorting');
if (h) h(this, Sys.EventArgs.Empty);
}
//#endregion
//#region 分页改变事件
this.add_PageIndexChanged = function (handler) {
EventHandler.addHandler('PageIndexChanged', handler);
}
//#endregion
//#region 初始化
this.Init = function () {
//if ($("#" + My.DivTableID, My.ParentElement).length > 0) return;
$("#" + My.id, My.ParentElement).html("");
if (My.ListSorting.length > 0) {
$("<div id='" + My.SortingID + "'><input class='easyui-combobox' editable='false' style='width:150px;' /><input id='Radio_Asc' type='radio' name='Sorting' value='asc' checked='true' /><span>升序</span><input id='Radio_Desc' type='radio' name='Sorting' value='desc' /><span>降序</span></div>").appendTo($("#" + My.id, My.ParentElement));
//初始化下拉框
if (My.ListSorting[0].value != "0") {
var model = new Object();
model.text = "默认";
model.value = "0";
Array.insert(My.ListSorting, 0, model);
}
$("#" + My.SortingID + " .easyui-combobox", My.ParentElement).combobox({
data: My.ListSorting,
valueField: 'value',
textField: 'text'
});
$("#" + My.SortingID + " .easyui-combobox", My.ParentElement).combobox("select", "0");
}
//如果需要固定表头那么添加div属性
//if (My.IsFixHeader == true) {
// $("<div id='" + My.DivTableID + "' style=\"overflow: auto;width:" + My.Width + ";height:" + My.Height + ";\"></div>").appendTo($("#" + My.id, My.ParentElement));
//}
//else {
$("<div id='" + My.DivTableID + "' style=\"width:" + My.Width + ";height:" + My.Height + ";\"></div>").appendTo($("#" + My.id, My.ParentElement));
//}
if (My.AllowPaging == true) CreatePage();
if (My.Columns.length > 0) {
var html = new Sys.StringBuilder();
html.append("<table id='" + My.TableID + "' class='DataGridTableStyle' style='width:" + My.TableWidth + ";'>");
CreateHeader(html);
html.append("</table>");
$("#" + My.DivTableID, My.ParentElement).html(html.toString());
}
}
//#endregion
//#region 加载Html表格
this.LoadHtml = function (source) {
$("#" + My.DivTableID, My.ParentElement).html(source);
//下拉框选择值
var ListDropDownList = $("#" + My.TableID, My.ParentElement).find("select[FieldValue]");
if (ListDropDownList.length > 0) {
$(ListDropDownList).each(function () {
var value = $(this).attr("FieldValue"); //数据源的值
if (value != "") {
var options = $(this).find("option");
$(options).each(function () {
if ($(this).val() == value) $(this).attr("selected", "selected");
});
}
});
}
if (My.SortExpression != "") {
var th = $("#" + My.DivTableID + " th[SortExpression=" + My.SortExpression + "]", My.ParentElement);
if (My.ViewSortDirection == "asc") th.append("<span class='DataGrid_Sort_Asc' />");
if (My.ViewSortDirection == "desc") th.append("<span class='DataGrid_Sort_Desc' />");
}
//排序事件
$("#" + My.DivTableID + " th[SortExpression]", My.ParentElement).bind("click", function () {
//去除
My.SortExpression = $(this).attr("SortExpression"); //当前排序字段名称
if (My.SortExpression == "" || My.SortExpression == undefined) return;
if (My.ViewSortDirection == "asc") { My.ViewSortDirection = "desc"; }
else { My.ViewSortDirection = "asc"; }
OnSorting(); //引发排序事件
});
//单选行事件
if (My.SelectMode == nblf.ui.SelectMode.SingleRow) {
//选择行事件
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind("click", function () {
$(this).attr("Selected", "true");
$(this).addClass("DataGridSelectRowStyle");
var index = $(this).attr("index");
var SelectTR = $("#" + My.TableID + " tr[Selected='true']", My.ParentElement).not("[index='" + index + "']");
$(SelectTR).attr("Selected", "false");
$(SelectTR).removeClass("DataGridSelectRowStyle");
$(SelectTR).removeClass("DataGridRowMouseOverStyle");
if (My.LeftMenu != "") {
My.MouseClickRowIndex = index;
$('#' + My.LeftMenu, My.ParentElement).menu('show', {
left: event.clientX,
top: event.clientY
});
return false;
}
OnRowClick();
});
}
//多选行事件
if (My.SelectMode == nblf.ui.SelectMode.MultiRow) {
//选择行事件
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind("click", function () {
var Selected = $(this).attr("Selected");
if (Selected == "false") {
$(this).attr("Selected", "true");
$(this).addClass("DataGridSelectRowStyle");
}
else {
$(this).attr("Selected", "false");
$(this).removeClass("DataGridSelectRowStyle");
}
if (My.LeftMenu != "") {
var index = $(this).attr("index");
My.MouseClickRowIndex = index;
$('#' + My.LeftMenu).menu('show', {
left: event.clientX,
top: event.clientY
});
return false;
}
OnRowClick();
});
}
//选择行背景变色
if (My.IsHoverColor == true) {
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).hover(function () {
if ($(this).attr("Selected") == "false") $(this).addClass("DataGridRowMouseOverStyle");
},
function () {
if ($(this).attr("Selected") == "false") $(this).removeClass("DataGridRowMouseOverStyle");
});
}
if (My.LeftMenu != "" && My.SelectMode != nblf.ui.SelectMode.SingleRow && My.SelectMode != nblf.ui.SelectMode.MultiRow) {
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind('click', function () {
$('#' + My.LeftMenu, My.ParentElement).menu('show', {
left: event.clientX,
top: event.clientY
});
return false;
});
}
if (My.RightMenu != "") {
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind('contextmenu', function (e) {
// var index = $(this).attr("index");
// My.MouseClickRowIndex = index;
$('#' + My.RightMenu, My.ParentElement).menu('show', {
left: e.pageX,
top: e.pageY
});
return false;
});
}
}
//#endregion
//#region 绑定数据源
this.DataBind = function (source) {
if (source == null) {
Array.clear(My.DataSource);
RefshDataSource();
//清除表头除外的行
//$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).remove();
return;
}
if (source.__type == "Microsoft.Practices.EnterpriseLibrary.JavaDataTable") {
JavaDataTable = source;
Array.clear(My.DataSource);
$(JavaDataTable.Rows).each(function () {
var row = this;
var model = new Object();
var ColIndex = 0;
$(JavaDataTable.Columns).each(function () {
model[this.ColumnName] = row.ItemArray[ColIndex];
ColIndex++;
});
Array.add(My.DataSource, model);
});
}
else {
My.DataSource = source;
}
RefshDataSource();
}
//#endregion
//#region 刷新数据源
function RefshDataSource() {
if (My.PaperModel == 1) {
My.DataPager.RowCount = My.DataSource.length;
My.DataPager.MathPageNumber();
}
if (My.IsFixHeader == true) {
$("#" + My.id).html("<div id='" + My.DivTableID + "' style=\"width:" + My.Width + ";height:" + My.Height + ";\"></div>");
if (My.AllowPaging == true) CreatePage();
}
var html = new Sys.StringBuilder();
html.append("<table id='" + My.TableID + "' class='DataGridTableStyle' style='width:" + My.TableWidth + ";'>");
CreateHeader(html);
if (My.DataSource != null && My.DataSource.length > 0) CreateRows(html);
html.append("</table>");
$("#" + My.DivTableID, My.ParentElement).html(html.toString());
//下拉框选择值
var ListDropDownList = $("#" + My.TableID, My.ParentElement).find("select[FieldValue]");
if (ListDropDownList.length > 0) {
$(ListDropDownList).each(function () {
var value = $(this).attr("FieldValue"); //数据源的值
if (value != "") {
var options = $(this).find("option");
$(options).each(function () {
if ($(this).val() == value) $(this).attr("selected", "selected");
});
}
});
}
if (My.SortExpression != "") {
var th = $("#" + My.DivTableID + " th[SortExpression=" + My.SortExpression + "]", My.ParentElement);
if (My.ViewSortDirection == "asc") th.append("<span class='DataGrid_Sort_Asc' />");
if (My.ViewSortDirection == "desc") th.append("<span class='DataGrid_Sort_Desc' />");
}
//排序事件
$("#" + My.DivTableID + " th[SortExpression]", My.ParentElement).bind("click", function () {
//去除
My.SortExpression = $(this).attr("SortExpression"); //当前排序字段名称
if (My.SortExpression == "" || My.SortExpression == undefined) return;
if (My.ViewSortDirection == "asc") { My.ViewSortDirection = "desc"; }
else { My.ViewSortDirection = "asc"; }
OnSorting(); //引发排序事件
});
//滚动条事件
if (My.IsFixHeader == true) {
var w = $("#" + My.id).width();
if (w == 0) w = My.Width;
//if (My.Width != "") w = My.Width;
$("#" + My.DivTableID).fixTable({
fixColumn: My.FixLeftColumns,//固定列数
width: w,//显示宽度
height: My.Height //显示高度
});
}
//单选行事件
if (My.SelectMode == nblf.ui.SelectMode.SingleRow) {
//选择行事件
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind("click", function () {
$(this).attr("Selected", "true");
$(this).addClass("DataGridSelectRowStyle");
var index = $(this).attr("index");
var SelectTR = $("#" + My.TableID + " tr[Selected='true']", My.ParentElement).not("[index='" + index + "']");
$(SelectTR).attr("Selected", "false");
$(SelectTR).removeClass("DataGridSelectRowStyle");
$(SelectTR).removeClass("DataGridRowMouseOverStyle");
if (My.LeftMenu != "") {
My.MouseClickRowIndex = index;
$('#' + My.LeftMenu, My.ParentElement).menu('show', {
left: event.clientX,
top: event.clientY
});
return false;
}
OnRowClick();
});
}
//多选行事件
if (My.SelectMode == nblf.ui.SelectMode.MultiRow) {
//选择行事件
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind("click", function () {
var Selected = $(this).attr("Selected");
if (Selected == "false") {
$(this).attr("Selected", "true");
$(this).addClass("DataGridSelectRowStyle");
}
else {
$(this).attr("Selected", "false");
$(this).removeClass("DataGridSelectRowStyle");
}
if (My.LeftMenu != "") {
var index = $(this).attr("index");
My.MouseClickRowIndex = index;
$('#' + My.LeftMenu).menu('show', {
left: event.clientX,
top: event.clientY
});
return false;
}
OnRowClick();
});
}
//选择行背景变色
if (My.IsHoverColor == true) {
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).hover(function () {
if ($(this).attr("Selected") == "false") $(this).addClass("DataGridRowMouseOverStyle");
},
function () {
if ($(this).attr("Selected") == "false") $(this).removeClass("DataGridRowMouseOverStyle");
});
}
if (My.LeftMenu != "" && My.SelectMode != nblf.ui.SelectMode.SingleRow && My.SelectMode != nblf.ui.SelectMode.MultiRow) {
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind('click', function () {
$('#' + My.LeftMenu, My.ParentElement).menu('show', {
left: event.clientX,
top: event.clientY
});
return false;
});
}
if (My.RightMenu != "") {
$("#" + My.TableID + " tr[name='DataGridRow']", My.ParentElement).bind('contextmenu', function (e) {
// var index = $(this).attr("index");
// My.MouseClickRowIndex = index;
$('#' + My.RightMenu, My.ParentElement).menu('show', {
left: e.pageX,
top: e.pageY
});
return false;
});
}
}
//#endregion
//#region 创建表头
function CreateHeader(html) {
if (My.ShowHeader == false) return;
html.append("<thead>");
//if (My.IsFixHeader == false) { html.append("<tr name='DataGridHeader' class='HeaderStyle'>"); }
//else { html.append("<tr name='DataGridHeader' class='FixedHeaderStyle'>"); }
html.append("<tr name='DataGridHeader' class='HeaderStyle'>");
//初始化列表头
if (My.SelectMode == nblf.ui.SelectMode.RadioButton) {
html.append("<th style='width:30px'"); //显示单选列
if (My.FixLeftColumns > 0) html.append(" class='FixedColumnStyle'");
html.append("></th>");
}
if (My.SelectMode == nblf.ui.SelectMode.CheckBox) {
//显示多选列
html.append("<th style='width:30px'"); //显示多选列
if (My.FixLeftColumns > 0) html.append(" class='FixedColumnStyle'");
html.append("><input id='" + My.TableID + "_SelectAll' type='checkbox' onclick=\"$(\'#" + My.id + " input[name=SelectCheckBox]\').attr('checked', this.checked);\"></input></th>");
}
if (My.ShowIndexColumn == true) {
html.append("<th style='width:30px'"); //显示序号列
if (My.FixLeftColumns > 0) html.append(" class='FixedColumnStyle'");
html.append(">序号</th>");
}
var index = 0;
$.each(My.Columns, function (i, n) {
style = "width:" + n.Width + ";";
if (this.SortExpression != "") style += "cursor:pointer;";
if (this.Align != "") style += "text-align: " + this.Align + ";";
html.append("<th SortExpression='" + this.SortExpression + "' style='" + style + "'");
if (index < My.FixLeftColumns) html.append(" class='FixedColumnStyle'");
html.append(">" + n.HeaderText + "</th>");
index++;
});
html.append("</tr>");
html.append("</thead>");
}
//#endregion
//#region 创建所有行
function CreateRows(html) {
html.append("<tbody>");
if (My.PaperModel == 0 || My.AllowPaging == false) {
var index = 0;
$(My.DataSource).each(function () {
CreateRow(html, this, index);
index++;
});
} else {
var StartIndex = (My.DataPager.PageIndex - 1) * My.DataPager.PageSize;
if (StartIndex == My.DataSource.length) {
My.DataPager.SetPageIndex(My.DataPager.PageIndex - 1);
My.DataPager.RowCount = My.DataSource.length;
My.DataPager.MathPageNumber();
StartIndex -= My.DataPager.PageSize;
}
var StopIndex = StartIndex + My.DataPager.PageSize;
if (My.DataSource.length < StopIndex) StopIndex = My.DataSource.length;
for (var i = StartIndex; i < StopIndex; i++) {
CreateRow(html, My.DataSource[i], i);
}
}
html.append("</tbody>");
return html;
}
//#endregion
//#region 创建行
function CreateRow(html, model, index) {
html.append("<tr name='DataGridRow' index='" + index + "' class='DataGridRowStyle' Selected='false'>");
if (My.SelectMode == nblf.ui.SelectMode.RadioButton) {
html.append("<td");
if (My.FixLeftColumns > 0) html.append(" class='FixedColumnStyle'");
html.append("><input type='radio' name='SelectRadioButton' /></td>");
}
if (My.SelectMode == nblf.ui.SelectMode.CheckBox) {
html.append("<td");
if (My.FixLeftColumns > 0) html.append(" class='FixedColumnStyle'");
html.append("><input type='checkbox' name='SelectCheckBox' /></td>");
}
if (My.ShowIndexColumn == true) {
html.append("<td");
if (My.FixLeftColumns > 0) html.append(" class='FixedColumnStyle'");
html.append(">" + (index + 1) + "</td>");
}
var temp = model;
var index2 = 0;
$(My.Columns).each(function () {
style = "";
if (this.Align != "") style += "text-align: " + this.Align + ";";
if (this.Style != "") style += this.Style;
if (this.Width != "") style += "width:" + this.Width + ";";
if (style != "") style = "style='" + style + "'";
var tr = new Sys.StringBuilder();
tr.append("<td " + style);
if (index2 < My.FixLeftColumns) tr.append(" class='FixedColumnStyle'");
index2++;
var controlHtml = this.CellTemplate;
StringArray = controlHtml.match(new RegExp("\{Bind [^}]*\}", "ig"));
if (StringArray != null) {
for (var i = 0; i < StringArray.length; i++) {
var ss = StringArray[i].substr(6, StringArray[i].length - 7).split(","); //分隔字符串
var value = temp[ss[0]]; //数据源的值
if (value == null) value = "";
if (this.CellFormatter)
value = this.CellFormatter(value, temp);
if (ss.length == 1) {
//不需要格式化
controlHtml = controlHtml.replace("{Bind " + ss[0] + "}", value)
}
else {
if (value == "") {
controlHtml = controlHtml.replace("{Bind " + ss[0] + "," + ss[1] + "}", value);
}
else {
var FormatValue = "";
if (ss[1] != "encode") {
if (ss[1].length == 2 && ss[1].substr(0, 1) == "d") {
FormatValue = parseFloat(value.localeFormat("n" + ss[1].substr(1, 1))).localeFormat("d");
} else { FormatValue = FormatWeek(value, ss[1]); }
}
else {
FormatValue = escape(value);
}
controlHtml = controlHtml.replace("{Bind " + ss[0] + "," + ss[1] + "}", FormatValue)
}
}
}
}
controlHtml = controlHtml.replace(new RegExp("checked='false'", "ig"), "");
controlHtml = controlHtml.replace(new RegExp("checked=''", "ig"), "");
tr.append(">" + controlHtml + "</td>");
html.append(tr.toString());
});
html.append("</tr>");
}
//#endregion
//#region 创建分页UI
function CreatePage() {
if ($("#" + My.PageID, My.ParentElement).length > 0) $("#" + My.id, My.ParentElement).css("width", My.Width);
$("#" + My.id, My.ParentElement).append("<div id='" + My.PageID + "' style='width:100%;'></div>");
My.DataPager.add_PageIndexChanged(function OnPageIndexChanged(sender, e) {
if (My.PaperModel == 0) {
var h = EventHandler.getHandler('PageIndexChanged');
if (h) h(My, Sys.EventArgs.Empty);
} else {
RefshDataSource(); //内存分页,刷新数据源
My.DataPager.MathPageNumber();
}
});
My.DataPager.Init(); //初始化
}
//#endregion
//#region 取得表头
this.Get_Header = function () {
return $("#" + My.TableID + " tr[name='DataGridHeader']", My.ParentElement);
}
//#endregion
//#region 替换表头
this.ReplaceHeader = function (content) {
$("#" + My.TableID + " tr[name='DataGridHeader']", My.ParentElement).replaceWith(content);
}
//#endregion
//#region 内部更新数据源
function UpdateSource() {
var rows;
if (My.IsFixHeader == false) {
rows = $("#" + My.TableID + ":first tr[name='DataGridRow']", My.ParentElement);
} else {
rows = $("#_fixTableMain tr[name='DataGridRow']", My.ParentElement);
}
$(rows).each(function () {
var temp = this; //行对象
var index = parseInt($(temp).attr("index")); //行索引
$(My.Columns).each(function () {
var controlHtml = this.CellTemplate;
var HeaderText = this.HeaderText;
var StringArray = controlHtml.match(new RegExp("\{Bind [^}]*\}", "ig"));
if (StringArray != null) {
for (var i = 0; i < StringArray.length; i++) {
var ss = StringArray[i].substr(6, StringArray[i].length - 7).split(","); //分隔字符串
var ctrl = $(temp).find("[ColName=" + ss[0] + "]"); //数据源列关联的控件
if (ctrl.length == 0) continue;
var tagName = $(ctrl).attr("tagName");
if (tagName == undefined) continue;
tagName = tagName.toUpperCase();
if (tagName == "SELECT") break;
var ctrlType = $(ctrl).attr("type"); //取得输入控件类型
if (ctrlType == "text" || ctrlType == "password") {
//取得文本框的值,赋值给数据源
My.DataSource[index][ss[0]] = $(ctrl).val();
}
if (ctrlType == "checkbox" || ctrlType == "radio") {
My.DataSource[index][ss[0]] = $(ctrl)[0].checked;
}
if (ctrlType == "textarea") {
My.DataSource[index][ss[0]] = $(ctrl).val();
}
}
}
//这里处理下拉框
ListDropDownList = $(temp).find("select");
if (ListDropDownList.length > 0) {
$(ListDropDownList).each(function () {
var ColName = $(this).attr("ColName");
My.DataSource[index][ColName] = $(this).val();
});
}
});
});
}
//#endregion
//#region 更新数据源
this.UpdateDataSource = function () {
var rows;
if (My.IsFixHeader == false) {
rows = $("#" + My.TableID + ":first tr[name='DataGridRow']", My.ParentElement);
} else {
rows = $("#_fixTableMain tr[name='DataGridRow']", My.ParentElement);
}
var error = "";
$(rows).each(function () {
var temp = this; //行对象
var index = parseInt($(temp).attr("index")); //行索引
$(My.Columns).each(function () {
var controlHtml = this.CellTemplate;
var HeaderText = this.HeaderText;
var StringArray = controlHtml.match(new RegExp("\{Bind [^}]*\}", "ig"));
if (StringArray != null) {
for (var i = 0; i < StringArray.length; i++) {
var ss = StringArray[i].substr(6, StringArray[i].length - 7).split(","); //分隔字符串
var ctrl = $(temp).find("[ColName=" + ss[0] + "]"); //数据源列关联的控件
if (ctrl.length == 0) continue;
var tagName = $(ctrl).attr("tagName");
if (tagName == undefined || tagName == "SELECT") {
//这里处理下拉框
ListDropDownList = ctrl;
if (ListDropDownList.length > 0) {
$(ListDropDownList).each(function () {
var ColName = $(this).attr("ColName");
var required = $(this).attr("ColRequired");
My.DataSource[index][ColName] = $(this).val();
if (My.DataSource[index][ColName] == null) My.DataSource[index][ColName] = "";
if (My.DataSource[index][ColName] == "-1") My.DataSource[index][ColName] = "";
if (My.DataSource[index][ColName] == "-9999") My.DataSource[index][ColName] = "";
if (required == "true" && My.DataSource[index][ColName] == "") {
error = "第" + (index + 1) + "行" + HeaderText + "不能为空";
return false;
}
});
}
continue;
}
tagName = tagName.toUpperCase();
if (tagName == "SELECT") break;
var ctrlType = $(ctrl).attr("type"); //取得输入控件类型
var required = $(ctrl).attr("colrequired"); //取得是否不能为空
var validtype = $(ctrl).attr("validtype"); //取得验证方式
if (ctrlType == "text" || ctrlType == "password") {
//取得文本框的值,赋值给数据源
My.DataSource[index][ss[0]] = $(ctrl).val();
}
if (ctrlType == "checkbox" || ctrlType == "radio") {
My.DataSource[index][ss[0]] = $(ctrl)[0].checked;
}
if (ctrlType == "textarea") {
My.DataSource[index][ss[0]] = $(ctrl).val();
}
if (required == "true" && My.DataSource[index][ss[0]] == "") {
error = "第" + (index + 1) + "行" + HeaderText + "不能为空";
break;
}
if (validtype != undefined && My.DataSource[index][ss[0]] != "") {
if (validtype == "date" && JqueryIsData(Model[ColName]) == false) {
error = "第" + (index + 1) + "行" + HeaderText + "必须是日期格式,例2000-01-01";
break;
}
if (validtype == "email" && JqueryIsData(Model[ColName]) == false) {
error = "第" + (index + 1) + "行" + HeaderText + "必须是邮箱格式,例XXX@163.com";
break;
}
if (validtype == "idcard" && JqueryIsIdentityCard(Model[ColName]) == false) {
error = "第" + (index + 1) + "行" + HeaderText + "格式错误";
break;
}
if (validtype == "mobile" && JqueryIsPhone(Model[ColName]) == false) {
error = "第" + (index + 1) + "行" + HeaderText + "格式错误";
break;
}
}
}
if (error != "") return false;
}
});
if (error != "") return false;
});
return error;
}
//#endregion
//#region 格式化星期
function FormatWeek(cDate, FormatValue) {
if (cDate == null || cDate == undefined) return "";
var index = FormatValue.indexOf("W");
var CurrentDate = cDate.localeFormat(FormatValue);
if (index >= 0) {
var week;
switch (cDate.getDay()) {
case 0: week = "日";
break;
case 1: week = "一";
break;
case 2: week = "二";
break;
case 3: week = "三";
break;
case 4: week = "四";
break;
case 5: week = "五";
break;
case 6: week = "六";
break;
}
CurrentDate = CurrentDate.replace("W", week);
}
return CurrentDate;
}
//#endregion
}
nblf.ui.DataGrid.registerClass('nblf.ui.DataGrid', null);
//分页事件
nblf.ui.PageIndexChangedEventargs = function (PageIndex, PageSize) {
this.PageSize = PageSize;
this.PageIndex = PageIndex;
}
nblf.ui.PageIndexChangedEventargs.registerClass('nblf.ui.PageIndexChangedEventargs', Sys.EventArgs);
//绑定行事件
nblf.ui.DataGridRowEventargs = function (RowIndex) {
this.RowIndex = RowIndex;
}
nblf.ui.DataGridRowEventargs.registerClass('nblf.ui.DataGridRowEventargs', Sys.EventArgs);
//#region 绑定模板
function ReplaceTemplet(Element, Model) {
var controlHtml = $(Element).html();
StringArray = controlHtml.match(new RegExp("\{Bind [^}]*\}", "ig"));
if (StringArray != null) {
for (var i = 0; i < StringArray.length; i++) {
var ss = StringArray[i].substr(6, StringArray[i].length - 7).split(","); //分隔字符串
var value = Model[ss[0]]; //数据源的值
if (value == null) value = "";
if (ss.length == 1) {
//不需要格式化
controlHtml = controlHtml.replace("{Bind " + ss[0] + "}", value)
}
else {
if (value == "") {
controlHtml = controlHtml.replace("{Bind " + ss[0] + "," + ss[1] + "}", "");
}
else {
var FormatValue = "";
if (ss[1] != "encode") {
if (ss[1].length == 2 && ss[1].substr(0, 1) == "d") {
FormatValue = parseFloat(value.localeFormat("n" + ss[1].substr(1, 1))).localeFormat("d");
} else { FormatValue = value.localeFormat(ss[1]); }
}
else {
FormatValue = escape(value);
}
controlHtml = controlHtml.replace("{Bind " + ss[0] + "," + ss[1] + "}", FormatValue)
}
}
}
}
controlHtml = controlHtml.replace(new RegExp("checked='false'", "ig"), "");
return controlHtml;
}
//#endregion
function ToObject(JavaDataTable) {
//转化对象
var ListModel = new Array();
$(JavaDataTable.Rows).each(function () {
var row = this;
var model = new Object();
var ColIndex = 0;
$(JavaDataTable.Columns).each(function () {
model[this.ColumnName] = row.ItemArray[ColIndex];
ColIndex++;
});
Array.add(ListModel, model);
});
return ListModel;
}
Date.prototype.addDays = function (d) {
this.setDate(this.getDate() + d);
return this;
}
Date.prototype.addWeeks = function (w) {
this.addDays(w * 7);
return this;
}
Date.prototype.addMonths = function (m) {
var d = this.getDate();
this.setMonth(this.getMonth() + m);
if (this.getDate() < d) { this.setDate(0); }
return this;
}
Date.prototype.addYears = function (y) {
var m = this.getMonth();
this.setFullYear(this.getFullYear() + y);
if (m < this.getMonth()) {
this.setDate(0);
}
return this;
}
Date.prototype.addSeconds = function (s) {
this.setSeconds(this.getSeconds() + s);
return this;
}
Date.prototype.addMinutes = function (s) {
this.setMinutes(this.getMinutes() + s);
return this;
}
Date.prototype.addHours = function (s) {
this.setHours(this.getHours() + s);
return this;
}
Date.prototype.clone = function (s) {
var dt = new Date();
dt.setFullYear(this.getFullYear());
dt.setMonth(this.getMonth());
dt.setDate(this.getDate());
dt.setHours(this.getHours());
dt.setMinutes(this.getMinutes());
dt.setSeconds(this.getSeconds());
dt.setMilliseconds(this.getMilliseconds());
return dt;
}