using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Web.UI.WebControls; using System.Globalization; using System.Web.UI; using System.Data.OracleClient; using System.Xml; namespace CoreSavingLibrary { public enum DataSourceType { String = 0, Int32 = 1, Int64 = 2, Dec = 3, Date = 4, DateTime = 5, DateTh = 6 } public class DataSourceTool : System.Web.UI.UserControl { protected DataTable baseDataTable; protected FormView formViewDefault; protected Repeater repeaterDefault; protected PageWeb pageWebSheetDefault; protected String deleteCode = ""; protected int rowFocus = -1; protected CultureInfo th = new CultureInfo("th-TH"); protected CultureInfo en = new CultureInfo("en-US"); protected string jsRefName = ""; protected WebState state; protected List PrimaryKeys; protected List ReadOnlyColumns; private List button = new List(); protected List Button { get { return this.button; } } private List textbox = new List(); protected List Textbox { get { return textbox; } } public String TableName { get; set; } public String EventItemChanged { private get; set; } public String EventClicked { private get; set; } public int RowCount { get { return baseDataTable.Rows.Count; } } protected void SecondStructor(PageWeb pw, DataTable dt, String jsRefName) { this.pageWebSheetDefault = pw; this.baseDataTable = dt; this.state = pw.state; this.jsRefName = jsRefName; this.TableName = this.baseDataTable.TableName; PrimaryKeys = new List(); try { for (int i = 0; i < this.baseDataTable.PrimaryKey.Length; i++) { try { PrimaryKeys.Add(this.baseDataTable.PrimaryKey[i].ColumnName.ToLower()); } catch { } } } catch { } this.baseDataTable.PrimaryKey = null; ReadOnlyColumns = new List(); try { for (int i = 0; i < this.baseDataTable.Columns.Count; i++) { DataColumn dcm = this.baseDataTable.Columns[i]; dcm.MaxLength = -1; if (dcm.ReadOnly && !IsPrimaryKey(dcm)) { ReadOnlyColumns.Add(dcm.ColumnName.ToLower()); } if (string.IsNullOrEmpty(dcm.Expression)) { dcm.ReadOnly = false; } } } catch { } try { this.baseDataTable.Columns.Add("ROW_STATUS", Type.GetType("System.String")); } catch { } try { this.baseDataTable.Columns.Add("RUNNING_NUMBER", Type.GetType("System.Int32")); } catch { } //for (int i = 0; i < this.baseDataTable.Columns.Count; i++) //{ // if (!this.IsPrimaryKey(this.baseDataTable.Columns[i])) // { // if (string.IsNullOrEmpty(this.baseDataTable.Columns[i].Expression)) // { // this.baseDataTable.Columns[i].ReadOnly = false; // } // } //} } private void NewDataTable(DataTable dtData, String dtFormat) { baseDataTable.Clear(); try { for (int i = 0; i < dtData.Rows.Count; i++) { DataRow dr = baseDataTable.NewRow(); for (int c = 0; c < baseDataTable.Columns.Count; c++) { try { if (!string.IsNullOrEmpty(baseDataTable.Columns[c].Expression)) continue; if (baseDataTable.Columns[c].ColumnName.ToLower() == "running_number") // rinning_number { dr[c] = (i + 1); } else if (IsDateType(baseDataTable.Columns[c])) // date type { try { if (dtFormat == "xml") { dr[c] = DateTime.ParseExact(dtData.Rows[i][baseDataTable.Columns[c].ColumnName].ToString(), "yyyy-MM-dd HH:mm:ss", en); } else { dr[c] = dtData.Rows[i][baseDataTable.Columns[c].ColumnName]; } } catch { dr[c] = new DateTime(1500, 1, 1); } } else if (IsNumberType(baseDataTable.Columns[c])) // number type { try { dr[c] = dtData.Rows[i][baseDataTable.Columns[c].ColumnName]; } catch { dr[c] = 0; } } else { try { dr[c] = dtData.Rows[i][baseDataTable.Columns[c].ColumnName].ToString(); } catch { dr[c] = ""; } } } catch { } } try { dr["row_status"] = "none"; } catch { } baseDataTable.Rows.Add(dr); } } catch { } } public int DropDownDataBind(string sql, String column, String textField, String valueField) { DataTable dt = WebUtil.Query(sql); return DropDownDataBind(dt, column, textField, valueField); } public int DropDownDataBind(string sql, DataColumn column, String textField, String valueField) { return DropDownDataBind(sql, column.ColumnName, textField, valueField); } public int DropDownDataBind(DataTable data, String column, String textField, String valueField) { int result = -1; DropDownList dd; for (int i = 0; i < this.baseDataTable.Rows.Count; i++) { dd = this.FindDropDownList(i, column); dd.DataTextField = textField; dd.DataValueField = valueField; dd.DataSource = data; dd.DataBind(); result = i; } return result; } public int DropDownDataBind(DataTable data, DataColumn column, String textField, String valueField) { return DropDownDataBind(data, column.ColumnName, textField, valueField); } public int DropDownDataBind(DataTable data, String column, String textField, String valueField, int row) { int result = 1; DropDownList dd; dd = this.FindDropDownList(row, column); dd.DataTextField = textField; dd.DataValueField = valueField; dd.DataSource = data; dd.DataBind(); return result; } public int DropDownDataBind(DataTable data, DataColumn column, String textField, String valueField, int row) { return DropDownDataBind(data, column.ColumnName, textField, valueField, row); } public int IndexOf(string columnName) { if (string.IsNullOrEmpty(columnName)) return -1; for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (columnName == baseDataTable.Columns[c].ColumnName.ToLower()) { return c; } } return -1; } public DropDownList FindDropDownList(int row, String columnName) { DropDownList dd = null; if (formViewDefault != null && row == 0) { dd = (DropDownList)formViewDefault.FindControl(columnName); } else { dd = (DropDownList)repeaterDefault.Items[row].FindControl(columnName); } return dd; } public DropDownList FindDropDownList(int row, DataColumn column) { return FindDropDownList(row, column.ColumnName); } public TextBox FindTextBox(int row, String columnName) { TextBox dd = null; if (formViewDefault != null && row == 0) { dd = (TextBox)formViewDefault.FindControl(columnName); } else { dd = (TextBox)repeaterDefault.Items[row].FindControl(columnName); } return dd; } public Button FindButton(int row, String columnName) { Button dd = null; if (formViewDefault != null && row == 0) { dd = (Button)formViewDefault.FindControl(columnName); } else { dd = (Button)repeaterDefault.Items[row].FindControl(columnName); } return dd; } public TextBox FindTextBox(int row, DataColumn column) { return FindTextBox(row, column.ColumnName); } public CheckBox FindCheckBox(int row, String columnName) { CheckBox dd = null; if (formViewDefault != null && row == 0) { dd = (CheckBox)formViewDefault.FindControl(columnName); } else { dd = (CheckBox)repeaterDefault.Items[row].FindControl(columnName); } return dd; } public CheckBox FindCheckBox(int row, DataColumn column) { return FindCheckBox(row, column.ColumnName); } public int GetRowFocus() { return this.rowFocus; } public void SetRowFocus(int row) { this.rowFocus = row; } public void HtmlJsControlBuild() { WriteFormControl(); WriteHiddenField(); WriteJavaScript(); } public String ExportXml() { if (this.baseDataTable.Rows.Count <= 0) { return ""; } string table = this.TableName.ToLower(); StringBuilder resu = new StringBuilder("\n\n"); resu.Append("\n"); int thePkIndex = 0; for (int i = 0; i < this.baseDataTable.Rows.Count; i++) { string type = ""; string pkIndex = ""; string external = ""; string defaultValue = ""; resu.Append("\t\n"); for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (baseDataTable.Columns[c].ColumnName.ToLower() == "running_number") { continue; } if (i <= 0) { if (IsReadOnly(baseDataTable.Columns[c])) { external = " external=\"1\""; } else { external = ""; } if (IsPrimaryKey(baseDataTable.Columns[c])) { thePkIndex++; pkIndex = " pk_index=\"" + thePkIndex + "\""; external = ""; } else { pkIndex = ""; } if (IsDateType(baseDataTable.Columns[c])) { try { defaultValue = " default=\"" + Convert.ToDateTime(baseDataTable.Columns[c].DefaultValue).ToString("yyyy-MM-dd HH:mm:ss", en) + "\""; } catch { defaultValue = ""; } type = " type=\"date\""; } else if (IsNumberType(baseDataTable.Columns[c])) { try { defaultValue = " default=\"" + baseDataTable.Columns[c].DefaultValue + "\""; } catch { defaultValue = ""; } type = " type=\"number\""; } else { try { defaultValue = " default=\"" + baseDataTable.Columns[c].DefaultValue + "\""; } catch { defaultValue = ""; } type = ""; } } String value = ""; try { if (IsDateType(baseDataTable.Columns[c])) //date type { DateTime dt = new DateTime(1500, 1, 1); try { dt = Convert.ToDateTime(this.baseDataTable.Rows[i][c]); } catch { } if (dt.Year >= 1700) { value = dt.ToString("yyyy-MM-dd HH:mm:ss", en); } else { value = ""; } } else if (IsNumberType(baseDataTable.Columns[c])) //number type { try { value = Convert.ToDecimal(this.baseDataTable.Rows[i][c]) + ""; } catch { value = "0"; } } else { try { value = this.baseDataTable.Rows[i][c].ToString(); } catch { } } } catch { } resu.Append("\t\t<" + baseDataTable.Columns[c].ColumnName.ToLower() + type + pkIndex + external + defaultValue + ">"); resu.Append(value); resu.Append("\n"); } resu.Append("\t\n"); } resu.Append(""); return resu.ToString(); } public String ExportXmlPBFormat(string dwObjectName) { if (this.baseDataTable.Rows.Count <= 0) { return ""; } string table = this.TableName.ToLower(); StringBuilder resu = new StringBuilder("\n\n"); resu.Append("<" + dwObjectName + ">"); for (int i = 0; i < this.baseDataTable.Rows.Count; i++) { resu.Append("<" + dwObjectName + "_row>"); for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (baseDataTable.Columns[c].ColumnName.ToLower() == "running_number") { continue; } String value = ""; try { if (IsDateType(baseDataTable.Columns[c])) //date type { DateTime dt = new DateTime(1500, 1, 1); try { dt = Convert.ToDateTime(this.baseDataTable.Rows[i][c]); } catch { } if (dt.Year >= 1700) { value = dt.ToString("yyyy-MM-dd HH:mm:ss", en); } else { value = ""; } } else if (IsNumberType(baseDataTable.Columns[c])) //number type { try { value = Convert.ToDecimal(this.baseDataTable.Rows[i][c]) + ""; } catch { value = "0"; } } else { try { value = this.baseDataTable.Rows[i][c].ToString(); } catch { } } } catch { } resu.Append("<" + baseDataTable.Columns[c].ColumnName.ToLower() + ">"); resu.Append(value); resu.Append(""); } resu.Append(""); } resu.Append(""); return resu.ToString(); } public void SetFocusOnLoad(int row, DataColumn column) { Control ct = null; try { if (formViewDefault != null) { ct = formViewDefault; } else { ct = repeaterDefault.Items[row]; } } catch { } string clientId = ""; try { Control ct2 = ct.FindControl(column.ColumnName); if (ct2 != null) { clientId = ct2.ClientID; } } catch { } if (!string.IsNullOrEmpty(clientId)) { pageWebSheetDefault.SetFocusByClientId(clientId, pageWebSheetDefault.GetType()); } } protected void SetItem(int row, String column, object value) { if (repeaterDefault != null) { try { String rowStatus = this.baseDataTable.Rows[row]["row_status"].ToString(); if (rowStatus == "none") { this.baseDataTable.Rows[row]["row_status"] = "update"; } } catch { } } try { this.baseDataTable.Rows[row][column.ToLower()] = value; } catch { } } public void SetItem(int row, DataColumn column, object value) { SetItem(row, column.ColumnName, value); } protected String re(int row, String column) { try { String fullName = "name_databinder_" + this.jsRefName + "_" + column.ToLower() + "_" + row; String value = pageWebSheetDefault.Request[fullName]; if (string.IsNullOrEmpty(value)) { value = ""; } return value; } catch { return ""; } } protected int reInt(int row, String column) { try { return Int32.Parse(re(row, column)); } catch { return 0; } } protected long reLong(int row, String column) { try { return Int64.Parse(re(row, column)); } catch { return 0; } } protected decimal reDec(int row, String column) { try { return Decimal.Parse(re(row, column)); } catch { return 0; } } protected DateTime reDate(int row, String column) { try { DateTime result = new DateTime(1500, 1, 1); String resu = re(row, column); if (resu.Length == 10) { result = DateTime.ParseExact(resu, "yyyy-MM-dd", en); } else if (resu.Length == 19) { result = DateTime.ParseExact(resu, "yyyy-MM-dd HH:mm:ss", en); } return result; } catch { return new DateTime(1500, 1, 1); } } public int ImportData(object data) { this.deleteCode = ""; int row = 0; if (data == null) { baseDataTable.Clear(); } else if (data.GetType() == typeof(System.String)) { row = ImportXmlString(data.ToString()); } else if (data.GetType().Name == "OracleLob") { row = ImportXmlString(((OracleLob)data).Value.ToString()); } else if (data.GetType() == typeof(System.Data.DataTable) || data.GetType() == typeof(DataLibrary.Sdt)) { row = ImportDataTable((DataTable)data); } else if (data.GetType() == typeof(System.Data.IDataReader) || data.GetType() == typeof(System.Data.OracleClient.OracleDataReader)) { row = ImportDataReader((IDataReader)data); } if (formViewDefault != null) { if (row <= 0) { this.SecondInitFormView(); } formViewDefault.DataSource = this.baseDataTable; formViewDefault.DataBind(); } else { repeaterDefault.DataSource = this.baseDataTable; repeaterDefault.DataBind(); } return row; } protected int ImportXmlString(String xml) { int ii = 0; baseDataTable.Clear(); try { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); string tagRowName = doc.FirstChild.NextSibling.ChildNodes.Item(0).Name; XmlNodeList nList = doc.GetElementsByTagName(tagRowName); for (int i = 0; i < nList.Count; i++) { DataRow dr = baseDataTable.NewRow(); XmlNode nodeRow = nList.Item(i); for (int c = 0; c < nodeRow.ChildNodes.Count; c++) { XmlNode nodeCol = nodeRow.ChildNodes[c]; int ci = IndexOf(nodeCol.Name.ToLower()); if (ci >= 0) { if (IsDateType(baseDataTable.Columns[ci])) { try { String get = nodeCol.InnerText.ToString(); DateTime dates = Convert.ToDateTime(get); get = dates.ToString("yyyy-MM-dd HH:mm:ss"); dr[ci] = DateTime.ParseExact(get, "yyyy-MM-dd HH:mm:ss", en); } catch { dr[ci] = new DateTime(1500, 1, 1); } } else if (IsNumberType(baseDataTable.Columns[ci])) { try { dr[ci] = decimal.Parse(nodeCol.InnerText); } catch { dr[ci] = 0; } } else { try { dr[ci] = nodeCol.InnerText; } catch { dr[ci] = ""; } } } } for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (dr[c] == null || dr[c] == DBNull.Value) { if (IsDateType(baseDataTable.Columns[c])) { dr[c] = new DateTime(1500, 1, 1); } else if (IsNumberType(baseDataTable.Columns[c])) { dr[c] = 0; } else { dr[c] = ""; } } } try { baseDataTable.Rows.Add(dr); } catch { } ii++; if (formViewDefault != null) { break; } } if (ii > 0) { string r1 = ""; try { r1 = baseDataTable.Rows[0]["row_status"].ToString(); } catch { } if (r1 == "") { for (int i = 0; i < baseDataTable.Rows.Count; i++) { try { if (formViewDefault != null) { baseDataTable.Rows[i]["row_status"] = "formview"; } else { baseDataTable.Rows[i]["row_status"] = "none"; } } catch { } } } } } catch { ii = 0; this.baseDataTable.Rows.Clear(); } return ii; } protected int ImportDataTable(DataTable data) { try { baseDataTable.Clear(); } catch { } int ii = 0; try { for (int i = 0; i < data.Rows.Count; i++) { DataRow dr = baseDataTable.NewRow(); for (int c = 0; c < data.Columns.Count; c++) { try { string colName = data.Columns[c].ColumnName.ToLower(); int ci = IndexOf(colName); if (ci >= 0) { dr[ci] = data.Rows[i][c]; } } catch { } } for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (dr[c] == null || dr[c] == DBNull.Value) { if (IsDateType(baseDataTable.Columns[c])) { dr[c] = new DateTime(1500, 1, 1); } else if (IsNumberType(baseDataTable.Columns[c])) { dr[c] = 0; } else { dr[c] = ""; } } } try { if (formViewDefault == null) { dr["row_status"] = "none"; } else { dr["row_status"] = "formview"; } } catch { } try { baseDataTable.Rows.Add(dr); } catch { } ii++; if (formViewDefault != null) { break; } } } catch { ii = 0; baseDataTable.Clear(); } return ii; } protected int ImportDataReader(IDataReader data) { try { baseDataTable.Clear(); } catch { } int ii = 0; try { while (data.Read()) { DataRow dr = baseDataTable.NewRow(); for (int c = 0; c < data.FieldCount; c++) { try { string colName = data.GetName(c).ToLower(); int ci = IndexOf(colName); if (ci >= 0) { dr[ci] = data.GetValue(c); } } catch { } } for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (dr[c] == null || dr[c] == DBNull.Value) { if (IsDateType(baseDataTable.Columns[c])) { dr[c] = new DateTime(1500, 1, 1); } else if (IsNumberType(baseDataTable.Columns[c])) { dr[c] = 0; } else { dr[c] = ""; } } } try { if (formViewDefault == null) { dr["row_status"] = "none"; } else { dr["row_status"] = "formview"; } } catch { } try { baseDataTable.Rows.Add(dr); } catch { } ii++; if (formViewDefault != null) { break; } } } catch { ii = 0; baseDataTable.Clear(); } return ii; } protected String SyntaxInsert(int row) { StringBuilder sql = new StringBuilder("insert into " + this.TableName + "("); int cc = 0; for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (!IsReadOnly(baseDataTable.Columns[c]) && baseDataTable.Columns[c].ColumnName.ToLower() != "row_status" && baseDataTable.Columns[c].ColumnName.ToLower() != "running_number" && string.IsNullOrEmpty(baseDataTable.Columns[c].Expression)) { if (cc == 0) { sql.Append(baseDataTable.Columns[c].ColumnName); } else { sql.Append(", " + baseDataTable.Columns[c].ColumnName); } cc++; } } sql.Append(")values("); cc = 0; for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (!IsReadOnly(baseDataTable.Columns[c]) && baseDataTable.Columns[c].ColumnName.ToLower() != "row_status" && baseDataTable.Columns[c].ColumnName.ToLower() != "running_number" && string.IsNullOrEmpty(baseDataTable.Columns[c].Expression)) { String value; if (IsDateType(baseDataTable.Columns[c])) // date type { try { DateTime dt = Convert.ToDateTime(this.baseDataTable.Rows[row][c]); if (dt.Year <= 1700) { throw new Exception(); } value = "to_date('" + dt.ToString("yyyy-MM-dd HH:mm:ss", en) + "', 'yyyy-mm-dd hh24:mi:ss')"; } catch { value = "NULL"; } } else if (IsNumberType(baseDataTable.Columns[c])) // number type { try { value = Convert.ToDecimal(this.baseDataTable.Rows[row][c]).ToString(); } catch { value = "NULL"; } } else { try { value = "'" + this.baseDataTable.Rows[row][c].ToString() + "'"; } catch { value = "''"; } } if (cc == 0) { sql.Append(value); } else { sql.Append(", " + value); } cc++; } } sql.Append(")"); return sql.ToString(); } protected String SyntaxUpdate(int row) { StringBuilder sql = new StringBuilder("update " + this.TableName + " set "); int cc = 0; int primaryCount = PrimaryKeys.Count; for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (!IsReadOnly(baseDataTable.Columns[c]) && !IsPrimaryKey(baseDataTable.Columns[c]) && baseDataTable.Columns[c].ColumnName.ToLower() != "row_status" && baseDataTable.Columns[c].ColumnName.ToLower() != "running_number" && string.IsNullOrEmpty(baseDataTable.Columns[c].Expression)) { String value; if (IsDateType(baseDataTable.Columns[c])) //date type { try { DateTime dt = Convert.ToDateTime(baseDataTable.Rows[row][c]); if (dt.Year <= 1700) { throw new Exception(); } value = "to_date('" + dt.ToString("yyyy-MM-dd HH:mm:ss", en) + "', 'yyyy-mm-dd hh24:mi:ss')"; } catch { value = "NULL"; } } else if (IsNumberType(baseDataTable.Columns[c])) // number type { try { value = Convert.ToDecimal(baseDataTable.Rows[row][c]).ToString(); } catch { value = "NULL"; } } else { try { value = "'" + baseDataTable.Rows[row][c].ToString() + "'"; } catch { value = "''"; } } if (cc == 0) { sql.Append(baseDataTable.Columns[c].ColumnName + " = " + value); } else { sql.Append(", " + baseDataTable.Columns[c].ColumnName + " = " + value); } cc++; } } sql.Append(" where "); int ic = 0; for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (IsPrimaryKey(baseDataTable.Columns[c])) { String value; if (IsDateType(baseDataTable.Columns[c])) //date type { try { DateTime dt = Convert.ToDateTime(this.baseDataTable.Rows[row][c]); if (dt.Year <= 1700) { throw new Exception(); } value = "to_date('" + dt.ToString("yyyy-MM-dd HH:mm:ss", en) + "', 'yyyy-mm-dd hh24:mi:ss')"; } catch { value = "NULL"; } } else if (IsNumberType(baseDataTable.Columns[c])) //number type { try { value = Convert.ToDecimal(this.baseDataTable.Rows[row][c]).ToString(); } catch { value = "NULL"; } } else { try { value = "'" + this.baseDataTable.Rows[row][c].ToString() + "'"; } catch { value = "''"; } } if (ic == 0) { sql.Append(baseDataTable.Columns[c].ColumnName + " = " + value); } else { sql.Append(" and " + baseDataTable.Columns[c].ColumnName + " = " + value); } ic++; if (ic >= primaryCount) { break; } } } return sql.ToString(); } protected String SyntaxDelete(int row) { StringBuilder sql = new StringBuilder("delete from " + this.TableName + " where "); int primaryCount = PrimaryKeys.Count; int ic = 0; for (int c = 0; c < primaryCount; c++) { String value; if (IsDateType(this.baseDataTable.Columns[PrimaryKeys[c]])) // date type { try { DateTime dt = Convert.ToDateTime(this.baseDataTable.Rows[row][PrimaryKeys[c]]); if (dt.Year <= 1700) { throw new Exception(); } value = "to_date('" + dt.ToString("yyyy-MM-dd HH:mm:ss", en) + "', 'yyyy-mm-dd hh24:mi:ss')"; } catch { value = "NULL"; } } else if (IsNumberType(this.baseDataTable.Columns[PrimaryKeys[c]])) //number type { try { value = Convert.ToDecimal(this.baseDataTable.Rows[row][PrimaryKeys[c]]).ToString(); } catch { value = "NULL"; } } else { try { value = "'" + this.baseDataTable.Rows[row][PrimaryKeys[c]].ToString() + "'"; } catch { value = "''"; } } if (ic == 0) { sql.Append(PrimaryKeys[c] + " = " + value); } else { sql.Append(" and " + PrimaryKeys[c] + " = " + value); } ic++; if (ic >= primaryCount) { break; } } return sql.ToString(); } private void WriteJavaScript() { StringBuilder js = new StringBuilder(""); pageWebSheetDefault.ClientScript.RegisterStartupScript(pageWebSheetDefault.GetType(), "z0002" + this.jsRefName, js.ToString()); } private void WriteFormControl() { Control itemFinder; for (int i = 0; i < baseDataTable.Rows.Count; i++) { if (formViewDefault != null) { itemFinder = formViewDefault; } else { itemFinder = repeaterDefault.Items[i]; } for (int c = 0; c < baseDataTable.Columns.Count; c++) { if (IsDateType(baseDataTable.Columns[c])) // date type { try { Control ct = itemFinder.FindControl(baseDataTable.Columns[c].ColumnName); if (ct.GetType().FullName.ToLower() == "System.Web.UI.WebControls.TextBox".ToLower()) { TextBox tb = (TextBox)itemFinder.FindControl(baseDataTable.Columns[c].ColumnName.ToLower()); string format = tb.ToolTip; if (string.IsNullOrEmpty(format)) { format = "dd/MM/yyyy"; } DateTime dt; try { dt = Convert.ToDateTime(this.baseDataTable.Rows[i][c]); } catch { dt = new DateTime(1500, 1, 1); } if (dt.Year > 1700) { tb.Text = dt.ToString(format, th); } else { tb.Text = "00/00/0000"; } } } catch { } } else { try { Control ct = itemFinder.FindControl(baseDataTable.Columns[c].ColumnName); if (ct == null) throw new Exception("Not have control"); String value = ""; try { value = baseDataTable.Rows[i][c].ToString(); } catch { } if (ct.GetType().FullName.ToLower() == "System.Web.UI.WebControls.DropDownList".ToLower()) { int idx = -1; DropDownList dd = (DropDownList)ct; for (int j = 0; j < dd.Items.Count; j++) { if (value == dd.Items[j].Value) { dd.SelectedIndex = j; idx = j; break; } } if (idx < 0) { try { dd.DataSource = null; dd.DataBind(); } catch { } try { dd.Items.Add(new ListItem(value, value)); dd.SelectedIndex = 0; } catch { } } } else if (ct.GetType().FullName.ToLower() == "System.Web.UI.WebControls.CheckBox".ToLower()) { CheckBox cb = (CheckBox)ct; string tt = cb.ToolTip; if (string.IsNullOrEmpty(tt)) { tt = "1"; } else { try { string[] sp1 = tt.Split(':'); tt = sp1[0]; } catch { tt = "1"; } } try { ((CheckBox)ct).Checked = value == tt.Trim(); } catch { ((CheckBox)ct).Checked = false; } } else { if (IsNumberType(baseDataTable.Columns[c])) //number type { try { decimal decValue = Convert.ToDecimal(value); String vv = value; if (ct.GetType().FullName.ToLower() == "System.Web.UI.WebControls.TextBox".ToLower()) { TextBox tbx = (TextBox)ct; if (baseDataTable.Columns[c].ColumnName.ToLower() == "running_number") { vv = (i + 1).ToString(); value = vv; tbx.ReadOnly = true; } string format = ""; if (string.IsNullOrEmpty(tbx.ToolTip)) { format = ""; } else { format = tbx.ToolTip; } if (!string.IsNullOrEmpty(format)) { vv = decValue.ToString(format); } } ((TextBox)ct).Text = vv; } catch { ((TextBox)ct).Text = value; } } else { try { if (ct.GetType().FullName.ToLower() == "System.Web.UI.WebControls.TextBox".ToLower()) { TextBox tbx = (TextBox)ct; if (tbx.TextMode == TextBoxMode.Password) { tbx.ToolTip = ""; } else { tbx.ToolTip = value; } } } catch { } ((TextBox)ct).Text = value; } } } catch { } } } } } private void WriteHiddenField() { try { StringBuilder js = new StringBuilder("\n"); String jsRefName = this.jsRefName; for (int i = 0; i < this.baseDataTable.Rows.Count; i++) { for (int c = 0; c < this.baseDataTable.Columns.Count; c++) { object var = this.baseDataTable.Rows[i][c]; String value; if (var == null) { value = ""; } else if (IsDateType(baseDataTable.Columns[c])) //date type { try { value = Convert.ToDateTime(var).ToString("yyyy-MM-dd HH:mm:ss", en); } catch { value = ""; } } else { try { value = var.ToString(); } catch { value = ""; } } String clientId = ""; string columnName = baseDataTable.Columns[c].ColumnName.ToLower(); try { if (formViewDefault != null) { clientId = formViewDefault.FindControl(columnName).ClientID; } else { clientId = repeaterDefault.Items[i].FindControl(columnName).ClientID; } } catch { } bool isCheckBox = false; string format = "", check = "1", uncheck = "0"; Control itemFinder = formViewDefault != null ? (Control)formViewDefault : (Control)repeaterDefault.Items[i]; Control ct = null; try { ct = itemFinder.FindControl(columnName); if (ct != null) { if (ct.GetType().FullName.ToLower() == "System.Web.UI.WebControls.CheckBox".ToLower()) { isCheckBox = true; CheckBox cbx = (CheckBox)ct; string toolTip = cbx.ToolTip; try { if (string.IsNullOrEmpty(toolTip)) throw new Exception(); string[] spx = toolTip.Split(':'); check = spx[0].Trim(); uncheck = spx[1].Trim(); } catch { check = "1"; uncheck = "0"; } } else if (ct.GetType().FullName.ToLower() == "System.Web.UI.WebControls.TextBox".ToLower()) { TextBox tb = (TextBox)ct; string toolTip = tb.ToolTip; if (IsDateType(baseDataTable.Columns[c])) // date type { if (string.IsNullOrEmpty(toolTip)) { format = "dd/MM/yyyy"; } else { format = toolTip; } } else if (IsNumberType(baseDataTable.Columns[c])) //number type { if (string.IsNullOrEmpty(toolTip)) { format = ""; } else { format = toolTip; } } } } } catch { } js.Append("\n\n\n"); js.Append("\n"); js.Append("\n"); js.Append("\n"); if (isCheckBox) { js.Append("\n"); js.Append("\n"); } } string row_status = ""; try { row_status = this.baseDataTable.Rows[i]["row_status"].ToString(); } catch { } for (int b = 0; b < this.Button.Count; b++) { Control itemFinder = formViewDefault != null ? (Control)formViewDefault : (Control)repeaterDefault.Items[i]; Control ct = null; try { ct = itemFinder.FindControl(this.Button[b]); js.Append("\n"); js.Append("\n\n"); } catch (Exception ex) { } } js.Append("\n\n\n\n"); } for (int c = 0; c < this.baseDataTable.Columns.Count; c++) { js.Append("\n"); } js.Append("\n"); js.Append("\n"); js.Append("\n"); js.Append("\n\n"); pageWebSheetDefault.ClientScript.RegisterClientScriptBlock(pageWebSheetDefault.GetType(), "z0001" + jsRefName, js.ToString()); } catch { } } protected bool IsReadOnly(DataColumn dc) { return IsReadOnly(dc.ColumnName); } protected bool IsReadOnly(String column) { column = column.ToLower(); for (int i = 0; i < ReadOnlyColumns.Count; i++) { if (column == ReadOnlyColumns[i]) { return true; } } return false; } protected bool IsDateType(String dc) { return IsDateType(baseDataTable.Columns[dc]); } protected bool IsDateType(DataColumn dc) { return IsDateType(dc.DataType); } protected bool IsDateType(Type dc) { try { return dc.FullName.ToLower() == "system.datetime"; } catch { } return false; } protected bool IsNumberType(String dc) { return IsNumberType(baseDataTable.Columns[dc]); } protected bool IsNumberType(DataColumn dc) { return IsNumberType(dc.DataType); } protected bool IsNumberType(Type dc) { try { string tName = dc.FullName.ToLower(); return tName == "system.int16" || tName == "system.int32" || tName == "system.int64" || tName == "system.decimal" || tName == "system.float" || tName == "system.double"; } catch { } return false; } protected bool IsPrimaryKey(DataColumn column) { return IsPrimaryKey(column.ToString()); } protected bool IsPrimaryKey(String column) { try { for (int i = 0; i < PrimaryKeys.Count; i++) { if (PrimaryKeys[i] == column.ToLower()) { return true; } } } catch { } return false; } protected void SecondInitFormView() { try { this.baseDataTable.Clear(); } catch { } DataRow dr = this.baseDataTable.NewRow(); try { dr["row_status"] = "formview"; } catch { } for (int c = 0; c < baseDataTable.Columns.Count; c++) { try { DataColumn col = baseDataTable.Columns[c]; string colName = baseDataTable.Columns[c].ColumnName; if (IsDateType(col)) //date type { try { if (col.DefaultValue == DBNull.Value || col.DefaultValue == null) { dr[c] = new DateTime(1500, 1, 1); } else { dr[c] = col.DefaultValue; } } catch { dr[c] = new DateTime(1500, 1, 1); } } else if (IsNumberType(col)) //number type { try { if (col.DefaultValue == DBNull.Value || col.DefaultValue == null) { dr[c] = 0; } else { dr[c] = col.DefaultValue; } } catch { dr[c] = 0; } } else { try { if (col.DefaultValue == DBNull.Value || col.DefaultValue == null) { dr[c] = ""; } else { dr[c] = col.DefaultValue; } } catch { dr[c] = ""; } } } catch { } } this.baseDataTable.Rows.Add(dr); } } }