function DataSourceTool(controlName) { this.controlName = controlName; this.ParseInt = function (text) { try { text = text + ""; if (text.indexOf(".") >= 0) { var sp = text.split("."); text = sp[0]; } while (text.indexOf("0") == 0) { try { text = text.substr(1); } catch (err) { text = ""; } } if (text == "") { text = "0"; } var ii = parseInt(text); return ii; } catch (errr) { return 0; } } this.validateDate = function (dtEn) { if (!(dtEn.length == 10 || dtEn.length == 19)) { return false; } var dd = dtEn.substring(8, 10); var mm = dtEn.substring(5, 7); var yyyy = dtEn.substring(0, 4); var intDD = this.ParseInt(dd); var intMM = this.ParseInt(mm); var intYYYY = this.ParseInt(yyyy); if (intYYYY <= 1500) { return false; } if (intDD < 1 || intDD > 31) { return false; } else if (intMM < 1 || intMM > 12) { return false; } else if (intYYYY <= 0) { return false; } else { if (intMM == 2) { var isLeapYear = intYYYY % 4 == 0 && intYYYY > 1000; if (isLeapYear) { if (intDD > 29) { return false; } } else { if (intDD > 28) { return false; } } } else if (intMM == 4 || intMM == 6 || intMM == 9 || intMM == 11) { if (intDD > 30) { return false; } } } return true; } this.checkFormatDate = function (dtValue) { var pureDate = dtValue; var ii = 0; while (pureDate.indexOf("/") != -1) { pureDate = pureDate.replace("/", ""); ii++; if (ii > 5) break; } if (pureDate.length != 8) { alert("ระบุวันที่ผิดรูปแบบ '" + dtValue + "' กรุณาใส่ค่ารูปแบบ dd/MM/yyyy หรือ ddMMyyyy"); return null; } else { if (pureDate == "00000000") { return "00000000"; } else { var dd = pureDate.substring(0, 2); var mm = pureDate.substring(2, 4); var yyyy = pureDate.substring(4) + ""; var intY = parseInt(yyyy); return (intY - 543) + "-" + mm + "-" + dd; } } } this.addCommas = function (nStr) { nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } this.isNumber = function (number) { var num; var numPoint = 0; try { number = number + ""; if (number.substring(0, 1) == "-") { num = number.substr(1); } else { num = number; } var ch = num; var len, digit; if (ch == " ") { return false; len = 0; } else { len = ch.length; } for (var i = 0; i < len; i++) { digit = ch.charAt(i) if ((digit >= "0" && digit <= "9") || digit == ".") { if (digit == ".") { numPoint++; } if (numPoint > 1) { return false; } } else { return false; } } return true; } catch (Err) { return false; } } this.numberFormat = function (number, format) { if (!this.isNumber(number)) { alert("ระบุค่าตัวเลขไม่ถูกต้อง '" + number + "' กรุณาตรวจสอบ"); return number; } if (format != "") { var digit = 0; try { var spF = format.split('.'); if (spF.length > 1) { digit = spF[1].length; } } catch (err) { digit = 0; } var newNumber = 0; try { if (number != "") { newNumber = parseFloat(number + ""); } else { newNumber = "0"; } } catch (err) { newNumber = "0"; } var fixNumber = newNumber.toFixed(digit); return this.addCommas(fixNumber); } else { return number; } } this.convertToThDate = function (dtValue) { var dd = dtValue.substring(8, 10); var mm = dtValue.substring(5, 7); var yyyy = dtValue.substring(0, 4) + ""; var intY = parseInt(yyyy); return dd + "/" + mm + "/" + (intY + 543); } this.changeValue = function (row, column, obj) { var result = ""; var idCheckBox = "id_checked_databinder_" + this.controlName + "_" + column + "_" + (row); var ele = null; try { ele = document.getElementById(idCheckBox); } catch (err) { ele = null; } //ถ้าเป็น checkbox if (ele != null || ele != undefined) { var idEleChecked = "id_checked_databinder_" + this.controlName + "_" + column + "_" + (row); var idEleUnChecked = "id_unchecked_databinder_" + this.controlName + "_" + column + "_" + (row); var eleChecked = document.getElementById(idEleChecked); var eleUnChecked = document.getElementById(idEleUnChecked); var newValue = ""; if (obj.checked) { newValue = eleChecked.value; } else { newValue = eleUnChecked.value; } var idEleValue = "id_databinder_" + this.controlName + "_" + column + "_" + (row); var eleValue = document.getElementById(idEleValue); eleValue.value = newValue; this.SetUpdateStatus(row); return newValue; } else { //ถ้าไม่ใช่ checkbox (textbox, dropdown) var idType = "id_type_databinder_" + this.controlName + "_" + column + "_" + (row); var eleType = document.getElementById(idType); if (this.IsDateType(eleType.value)) { //date type var dtValue = this.checkFormatDate(obj.value); if (dtValue != null) { var idEleValue = "id_databinder_" + this.controlName + "_" + column + "_" + (row); if (dtValue == "00000000") { document.getElementById(idEleValue).value = ""; obj.value = "00/00/0000"; } else { var isValid = this.validateDate(dtValue); if (isValid) { document.getElementById(idEleValue).value = dtValue; obj.value = this.convertToThDate(dtValue); } else { document.getElementById(idEleValue).value = ""; dtValue = obj.value; alert("ระบุค่าวันที่ไม่ถูกต้อง '" + obj.value + "' กรุณาแก้ไข"); } } } this.SetUpdateStatus(row); return dtValue; } else if (this.IsNumberType(eleType.value)) { //number type this.SetItem(row, column, obj.value); return obj.value.replace(/,/g, ""); } else { var idEleValue = "id_databinder_" + this.controlName + "_" + column + "_" + (row); document.getElementById(idEleValue).value = obj.value; this.SetUpdateStatus(row); return obj.value; } } } this.GetItem = function (row, column) { var idEleValue = "id_databinder_" + this.controlName + "_" + column + "_" + (row); var value = document.getElementById(idEleValue).value; if (value == "") { return null; } else { var idType = "id_type_databinder_" + this.controlName + "_" + column + "_" + (row); var eleType = document.getElementById(idType); var tv = eleType.value.toLowerCase(); try { if (this.IsNumberPureType(tv)) { //number pure type return parseInt(value); } else if (this.IsNumberFullType(tv)) { //number full type return parseFloat(value); } else { return value; } } catch (err) { return null; } return value; } } this.IsDateType = function (typeString) { return typeString.toLowerCase() == "system.datetime"; } this.IsNumberType = function (typeString) { typeString = typeString.toLowerCase() return typeString == "system.int32" || typeString == "system.int64" || typeString == "system.decimal" || typeString == "system.float" || typeString == "system.double"; } this.IsNumberPureType = function (typeString) { typeString = typeString.toLowerCase() return typeString == "system.int32" || typeString == "system.int64"; } this.IsNumberFullType = function (typeString) { typeString = typeString.toLowerCase() return typeString == "system.decimal" || typeString == "system.float" || typeString == "system.double"; } this.SetItem = function (row, column, value) { var idEleValue = "id_databinder_" + this.controlName + "_" + column + "_" + (row); var idEleClientId = "id_clientid_databinder_" + this.controlName + "_" + column + "_" + (row); var idEleType = "id_type_databinder_" + this.controlName + "_" + column + "_" + (row); var idEleChecked = "id_checked_databinder_" + this.controlName + "_" + column + "_" + (row); var eleChecked = null; try { eleChecked = document.getElementById(idEleChecked); } catch (err) { eleChecked = null; } if (eleChecked != null || eleChecked != undefined) { //กรณี control เป็น checkbox var idEleUnChecked = "id_unchecked_databinder_" + this.controlName + "_" + column + "_" + (row); var eleChecked = document.getElementById(idEleChecked); var eleClientId = document.getElementById(idEleClientId); var newValue = null; if ((eleChecked.value + "") == (value + "")) { document.getElementById(eleClientId.value).checked = true; newValue = document.getElementById(idEleChecked).value + ""; document.getElementById(idEleValue).value = newValue; } else { document.getElementById(eleClientId.value).checked = false; newValue = document.getElementById(idEleUnChecked).value + ""; document.getElementById(idEleValue).value = newValue; } this.SetUpdateStatus(row); return newValue; } else { //กรณีไม่ใช่ checkbox (textbox, dropdown) var type = document.getElementById(idEleType).value; var eleClientId = document.getElementById(idEleClientId); var clientId = ""; try { clientId = eleClientId.value; } catch (err01) { clientId = ""; } if (this.IsDateType(type)) { //date type var isValid = this.validateDate(value); if (isValid) { if (clientId != "") { document.getElementById(eleClientId.value).value = this.convertToThDate(value); } document.getElementById(idEleValue).value = value; this.SetUpdateStatus(row); return value; } else { if (value == null || value == "" || value == "00000000" || value == "00/00/0000" || value == "0000-00-00" || value == "0000-00-00 00:00:00" || value == "1500-01-01" || value == "1500-01-01 00:00:00") { if (clientId != "") { document.getElementById(eleClientId.value).value = "00/00/0000"; } document.getElementById(idEleValue).value = "1500-01-01 00:00:00"; this.SetUpdateStatus(row); return null; } else { if (clientId != "") { document.getElementById(eleClientId.value).value = "00/00/0000"; } document.getElementById(idEleValue).value = "1500-01-01 00:00:00"; alert("ระบุค่าวันที่ไม่ถูกต้อง '" + value + "' กรุณาตรวจสอบ"); this.SetUpdateStatus(row); return null; } } } else if (this.IsNumberType(type)) { //number type value = value + ""; var idEleFormat = "id_format_databinder_" + this.controlName + "_" + column + "_" + (row); var eleFormat = document.getElementById(idEleFormat); var newValue = value.replace(/,/g, ""); var isNum = this.isNumber(newValue); if (isNum) { var newNumberValue = this.numberFormat(newValue, eleFormat.value); if (clientId != "") { document.getElementById(eleClientId.value).value = newNumberValue; } document.getElementById(idEleValue).value = newValue; } else { alert("ระบุตัวเลขไม่ถูกต้อง '" + newValue + "' กรุณาตรวจสอบ"); if (clientId != "") { document.getElementById(eleClientId.value).value = newValue; } document.getElementById(idEleValue).value = 0; newValue = 0; } this.SetUpdateStatus(row); return newValue; } else { if (value == null) { if (clientId != "") { document.getElementById(eleClientId.value).value = ""; } document.getElementById(idEleValue).value = null; } else { if (clientId != "") { document.getElementById(eleClientId.value).value = value + ""; } document.getElementById(idEleValue).value = value + ""; } this.SetUpdateStatus(row); return value + ""; } } } this.SetUpdateStatus = function (row) { var status = this.GetRowStatus(row); if (status == "none") { this.SetRowStatus(row, "update"); } } this.GetRowStatus = function (row) { var idEleRowStatus = "id_rowstatus_databinder_" + this.controlName + "_" + (row); return document.getElementById(idEleRowStatus).value; } this.SetRowStatus = function (row, status) { var idEleRowStatus = "id_rowstatus_databinder_" + this.controlName + "_" + (row); document.getElementById(idEleRowStatus).value = status; } this.GetRowCount = function () { var idEleRowCount = "id_maxrow_databinder_" + this.controlName; return this.ParseInt(document.getElementById(idEleRowCount).value); } this.SetRowFocus = function (row) { var idEleRowFocus = "id_rowfocus_databinder_" + this.controlName; document.getElementById(idEleRowFocus).value = row + ""; } this.GetRowFocus = function () { var idEleRowFocus = "id_rowfocus_databinder_" + this.controlName; return this.ParseInt(document.getElementById(idEleRowFocus).value); } this.GetElement = function (row, column) { var idEleClientId = "id_clientid_databinder_" + this.controlName + "_" + column + "_" + (row); var clientId = document.getElementById(idEleClientId).value; return document.getElementById(clientId); } this.Focus = function (row, column) { try { var ele = this.GetElement(row, column); ele.focus(); } catch (err) { } } this.CopyData = function (sourceRow, destinationRow, destinationDsObject) { var columnCount = this.ParseInt(document.getElementById("id_column_count_" + this.controlName).value); for (var c = 0; c < columnCount; c++) { var cName = document.getElementById("id_column_name_" + this.controlName + "_" + c).value try { if (cName != "row_status" && cName != "running_number") { destinationDsObject.SetItem(destinationRow, cName, this.GetItem(sourceRow, cName)); } } catch (err) { } } } }