發(fā)表日期:2015-09-08 文章編輯:南昌開優(yōu)網(wǎng)絡 瀏覽次數(shù):3923 標簽:ASP.NET應用
/********************************************** * 類作用: 網(wǎng)頁界面功能類 * 作者:開優(yōu)網(wǎng)絡 * http://www.568387.com ***********************************************/ using System; using System.Data; using System.Text; using System.Text.RegularExpressions; using System.Web.UI.WebControls; using System.Collections.Specialized; using System.Web.UI; using System.Collections; /* 采用此命名空間是為再Aspx頁面中無需導入特定命名空間 */ namespace System.Web { /// <summary> /// 網(wǎng)頁界面功能函數(shù) /// 作 者: abaal /// 日 期: 2008-09-03 /// </summary> public static class WebUI { /// <summary> /// 錯誤消息輸出 /// </summary> private static void page_Error(object sender, EventArgs e) { Page page1 = (Page)sender; Exception exception1 = page1.Server.GetLastError(); StringBuilder builder1 = new StringBuilder(); builder1.Append("<div style=\"font-size:10pt;font-family:verdana;line-height:150%;\">"); builder1.AppendFormat("<strong>\u9519\u8bef\u6d88\u606f\uff1a</strong>{0} \n", exception1.Message); builder1.AppendFormat("<strong>\u5bfc\u81f4\u9519\u8bef\u7684\u5e94\u7528\u7a0b\u5e8f\u6216\u5bf9\u8c61\u7684\u540d\u79f0</strong>\uff1a{0} \n", exception1.Source); builder1.AppendFormat("<div style=\"background-color:yellow;color:red;padding:12px;\"><strong>\u5806\u6808\u5185\u5bb9</strong>\uff1a{0} </div>\n", exception1.StackTrace); builder1.AppendFormat("<strong>\u5f15\u53d1\u5f02\u5e38\u7684\u65b9\u6cd5</strong>\uff1a{0} \n", exception1.TargetSite); builder1.AppendFormat("<strong>\u9519\u8bef\u9875\u9762</strong>\uff1a{0} \n", page1.Request.RawUrl); builder1.Append("</div>"); page1.Server.ClearError(); page1.Response.Write(builder1.ToString().Replace("\n", "<br/>")); } /// <summary> /// 注冊在線輸出錯誤消息模式 /// </summary> public static void RegisterOnlineDebug(Page page) { Uri uri1 = page.Request.UrlReferrer; if (((page.Request["DEBUG"] != null) && (page.Request["DEBUG"] == "true")) || ((uri1 != null) && (uri1.ToString().IndexOf("DEBUG=") != -1))) { page.Error += new EventHandler(WebUI.page_Error); } } #region 控件類 /// <summary> /// 綁定數(shù)據(jù)表格到服務器下拉列表控件 /// </summary> /// <param name="dpt">控件對象</param> /// <param name="strValField">值字段</param> /// <param name="strTxtField">文本字段</param> /// <param name="dTab">數(shù)據(jù)表格源</param> /// <param name="strValSel">默認選擇值</param> public static void BindDptData(DropDownList dpt, string strValField, string strTxtField, DataTable dTab, string strValSel) { dpt.DataSource = dTab; dpt.DataValueField = strValField; dpt.DataTextField = strTxtField; dpt.DataBind(); try { dpt.SelectedValue = strValSel; } catch (Exception) { } } /// <summary> /// 根據(jù)表單的記錄行設置相應服務器文本標簽控件的文本 /// </summary> /// <param name="dRow">記錄行</param> /// <param name="Columns">記錄行集參數(shù)</param> /// <param name="labels">相關(guān)文本標簽控件</param> public static void SetLabelText(ref DataRow dRow, object[] Columns, params Label[] labels) { if (Columns.Length < labels.Length) { throw new Exception("記錄集參數(shù)和相關(guān)文本標簽控件參數(shù)不匹配!"); } for (int i = 0; i < labels.Length; i++) { if (Columns[i].GetType() == typeof(object[])) { labels[i].Text = GetFormatStr((object[])Columns[i], ref dRow); } else { labels[i].Text = dRow[Columns[i].ToString()].ToString(); } } } /// <summary> /// 根據(jù)表單的記錄行設置相應服務器文本框控件的文本 /// </summary> /// <param name="dRow">記錄行</param> /// <param name="Columns">記錄行集參數(shù)</param> /// <param name="tbxes">相關(guān)文本框控件</param> public static void SetTextBoxText(ref DataRow dRow, object[] Columns, params TextBox[] tbxes) { if (Columns.Length < tbxes.Length) { throw new Exception("記錄集參數(shù)和相關(guān)文本標簽控件參數(shù)不匹配!"); } for (int i = 0; i < tbxes.Length; i++) { if (Columns[i].GetType() == typeof(object[])) { tbxes[i].Text = GetFormatStr((object[])Columns[i], ref dRow); } else { tbxes[i].Text = dRow[Columns[i].ToString()].ToString(); } } } /// <summary> /// 強制客戶端控件自動屏蔽HTML標簽的 < 和 > /// </summary> /// <param name="tbxes">相關(guān)TextBox服務端控件</param> public static void ForbiddenHtmlTag(params TextBox[] tbxes) { for (int i = 0; i < tbxes.Length; i++) { tbxes[i].Attributes.Add("onchange", @"this.value=this.value.replace(/\<.[^\<]*\>/gi,'')"); } } /// <summary> /// 強制客戶端控件的值為相關(guān)數(shù)字 /// </summary> /// <param name="EnableNegative">是否允許負數(shù)</param> /// <param name="iDefault">默認數(shù)字</param> /// <param name="tbxes">相關(guān)TextBox服務端控件</param> public static void ForceNumberValue(bool EnableNegative, int iDefault, params TextBox[] tbxes) { string strJs = (EnableNegative) ? "javascript:{if (!/^\\-?\\d+$/.test(this.value)) { this.value='" + iDefault.ToString() + "';}}" : "javascript:{if (!/^\\d+$/.test(this.value)) { this.value='" + iDefault.ToString() + "';}}"; for (int i = 0; i < tbxes.Length; i++) { tbxes[i].Attributes.Add("onchange", strJs); } } /// <summary> /// 根據(jù)鍵值集合設置相應服務器文本框控件的文本 /// </summary> /// <param name="nCol">鍵值集合</param> /// <param name="Columns">鍵集</param> /// <param name="tbxes">相關(guān)文本框控件</param> public static void SetTextBoxText(ref NameValueCollection nCol, object[] Columns, params TextBox[] tbxes) { if (Columns.Length < tbxes.Length) { throw new Exception("記錄集參數(shù)和相關(guān)文本標簽控件參數(shù)不匹配!"); } for (int i = 0; i < tbxes.Length; i++) { if (Columns[i].GetType() == typeof(object[])) { tbxes[i].Text = GetFormatStr((object[])Columns[i], ref nCol); } else { tbxes[i].Text = nCol[Columns[i].ToString()].ToString(); } } } /// <summary> /// 去異常選中服務端下拉列表值 /// </summary> /// <param name="dpt">下拉列表控件</param> /// <param name="sValue">下拉列表選中的值</param> public static void SetDropDownlistSelect(ref DropDownList dpt, string sValue) { try { dpt.SelectedValue = sValue; } catch (Exception) { } } /// <summary> /// 根據(jù)表單的記錄行設置相應服務器超級鏈接控件的文本、圖片鏈接、錨屬性 /// </summary> /// <param name="dRow">記錄行</param> /// <param name="Columns">記錄行集參數(shù)</param> /// <param name="links">超級鏈接控件</param> public static void SetHyperLink(ref DataRow dRow, object[] Columns, params HyperLink[] links) { if (Columns.Length < links.Length) { throw new Exception("記錄行參數(shù)和相關(guān)超級鏈接控件參數(shù)不匹配!"); } for (int i = 0; i < links.Length; i++) { if (Columns[i].GetType() == typeof(object[])) { links[i].Text = GetFormatStr((object[])Columns[i], ref dRow); } else { links[i].Text = dRow[Columns[i].ToString()].ToString(); } // 圖片地址 string strCheck = links[i].ImageUrl; if (IsMatchBinding(strCheck)) { links[i].ImageUrl = GetMatchBinding(strCheck, ref dRow); } // 鏈接 strCheck = links[i].NavigateUrl; if (IsMatchBinding(strCheck)) { links[i].NavigateUrl = GetMatchBinding(strCheck, ref dRow); } } } /// <summary> /// 查找是否有匹配類似于{"列名"}或{'列名'}項 /// </summary> /// <param name="strBindObject">需要檢測的文本串</param> /// <returns>是否綁定相關(guān)列數(shù)據(jù)</returns> private static bool IsMatchBinding(string strBindObject) { if (strBindObject == string.Empty) { return false; } else { // 匹配字符中的{"列名"}或{'列名'}項 // Source: \{(\"|\')[^\"\']+(\"|\')\} // Escaped: \\{(\\\"|\\')[^\\\"\\']+(\\\"|\\')\\} return Regex.IsMatch(strBindObject, "\\{(\\\"|\\')[^\\\"\\']+(\\\"|\\')\\}", RegexOptions.IgnoreCase); } } /// <summary> /// 根據(jù)行集轉(zhuǎn)化相應的列數(shù)據(jù)綁定 /// </summary> /// <param name="strBindObject">需要裝化的文本串</param> /// <param name="dRow">記錄行集參數(shù)</param> /// <returns>綁定文本輸出</returns> private static string GetMatchBinding(string strBindObject, ref DataRow dRow) { // Source: \{(\"|\')([^\"\']+)(\"|\')\} // Escaped: \\{(\\\"|\\')([^\\\"\\']+)(\\\"|\\')\\} string strPattern = "\\{(\\\"|\\')([^\\\"\\']+)(\\\"|\\')\\}"; MatchCollection mc = Regex.Matches(strBindObject, strPattern, RegexOptions.IgnoreCase); string strColumnName = string.Empty; int iTotal = mc.Count; for (int i = 0; i < iTotal; i++) { if (mc[i].Groups.Count == 4) { strColumnName = mc[i].Groups[2].Value; strBindObject = strBindObject.Replace(mc[i].Groups[0].Value, dRow[strColumnName].ToString()); } } return strBindObject; } /// <summary> /// 獲取相應記錄行的格式化字符 /// </summary> /// <param name="objParams">第1個參數(shù)為格式化字符參數(shù),其余參數(shù)為列名稱或其他數(shù)據(jù)類型</param> /// <param name="dRow">記錄行引用</param> /// <returns>符合相關(guān)參數(shù)的字符</returns> public static string GetFormatStr(object[] objParams, ref System.Data.DataRow dRow) { string strFmt = objParams[0].ToString(); object[] paramValue = new object[objParams.Length - 1]; for (int i = 1; i < objParams.Length; i++) { if (objParams[i].GetType() == typeof(string)) { paramValue[i - 1] = dRow[objParams[i].ToString()].ToString(); } else { paramValue[i - 1] = objParams[i]; } } return String.Format(strFmt, paramValue); } /// <summary> /// 獲取相應記錄行的格式化字符 /// </summary> /// <param name="objParams">第1個參數(shù)為格式化字符參數(shù),其余參數(shù)為列名稱或其他數(shù)據(jù)類型</param> /// <param name="nCol">鍵值訪問集合</param> /// <returns>符合相關(guān)參數(shù)的字符</returns> public static string GetFormatStr(object[] objParams, ref NameValueCollection nCol) { string strFmt = objParams[0].ToString(); object[] paramValue = new object[objParams.Length - 1]; for (int i = 1; i < objParams.Length; i++) { if (objParams[i].GetType() == typeof(string)) { paramValue[i - 1] = nCol[objParams[i].ToString()].ToString(); } else { paramValue[i - 1] = objParams[i]; } } return String.Format(strFmt, paramValue); } #endregion 控件類 #region 字符文本類 /// <summary> /// 獲取下拉列表的選項HTML /// </summary> /// <param name="dTab">數(shù)據(jù)表格源</param> /// <param name="strValField">值字段</param> /// <param name="strTxtField">文本字段</param> /// <param name="strValSel">默認選擇值</param> /// <returns>所有option標簽的構(gòu)建</returns> public static string GetOptionData(DataTable dTab, string strValField, string strTxtField, string strValSel) { if (dTab == null) { return string.Empty; } else { StringBuilder sb = new StringBuilder(); string optfmt = "<option value=\"{0}\"{2}>{1}</option>"; for (int i = 0; i < dTab.Rows.Count; i++) { sb.AppendFormat(optfmt, dTab.Rows[i][strValField], dTab.Rows[i][strTxtField], ((dTab.Rows[i][strValField].ToString() == strValSel) ? " selected" : "") ); } return sb.ToString(); } } /// <summary> /// 時間顯示 /// </summary> /// <param name="objTime">時間對象</param> /// <param name="strFmt">格式化字符</param> /// <returns>相應時間文本</returns> public static string GetTime(object objTime, string strFmt) { return Convert.ToDateTime(objTime).ToString(strFmt); } /// <summary> /// 取得文件的大小,從Byte到M /// </summary> /// <param name="tsize">文件大小的數(shù)字</param> /// <returns>文件大小的格式,如1.44M</returns> public static string GetSize(object tsize) { int filesize = 0; if (tsize == null) { filesize = 0; } else { filesize = Convert.ToInt32(tsize); } if (filesize > 0) { if (filesize > 1048576) { return (filesize / 1048576).ToString() + "M"; } else if (filesize > 1024) { return (filesize / 1024).ToString() + "K"; } else return filesize.ToString() + "B"; } else { return "未知"; } } public static string GetCheckedValue(CheckBoxList cbxList, string Separator) { ArrayList objList = new ArrayList(); foreach (ListItem item in cbxList.Items) { if (item.Selected == true) objList.Add(item.Value); } return string.Join(Separator, (string[])objList.ToArray(typeof(string))); } public static void SetCheckedValue(CheckBoxList cbxList, string chkedValue, string Separator) { string strSearchSource = Separator + chkedValue + Separator; foreach (ListItem item in cbxList.Items) { if (strSearchSource.IndexOf(Separator + item.Value + Separator) != -1) item.Selected = true; } } /// <summary> /// HTML代碼生成 /// </summary> /// <param name="dTab">數(shù)據(jù)表格源</param> /// <param name="objModel">模版數(shù)據(jù)(Item,AlterItem,LiteralCount,Lieteral,Header,Footer)</param> /// <returns>根據(jù)相應Repeater模版生成的字符集</returns> /// <remarks>ST:ToPractice More, Fixed 2006-4-4</remarks> public static string GeneralHtmlBind(DataTable dTab, params string[] objModel) { StringBuilder sb = new StringBuilder(5000); DataRow dRow = null; int k = 1; if (dTab != null) { for (int i = 0; i < dTab.Rows.Count; i++) { dRow = dTab.Rows[i]; if (k == 1 && objModel.Length > 4) { sb.Append(String.Format(objModel[4] + "\n", dRow.ItemArray)); } if (objModel.Length > 1 && objModel[1] != string.Empty && k % 2 == 0) { sb.Append(String.Format(objModel[1].Replace("$", k.ToString()), dRow.ItemArray)); } else { sb.Append(String.Format(objModel[0].Replace("$", k.ToString()), dRow.ItemArray)); } if (objModel.Length > 3 && objModel[3] != string.Empty && IsNumerical(objModel[2])) { if (k % int.Parse(objModel[2]) == 0 && k < dTab.Rows.Count) { sb.Append(objModel[3]); } } if (k == dTab.Rows.Count && objModel.Length > 5) { sb.Append(String.Format(objModel[5] + "\n", dRow.ItemArray)); } k++; } dTab.Dispose(); } return sb.ToString(); } /// <summary> /// 判斷輸入對象是否為數(shù)字類型 /// </summary> /// <param name="strInput">輸入對象</param> /// <returns>是否為不含小數(shù)點的數(shù)字類型</returns> private static bool IsNumerical(object strInput) { if (strInput == null) return false; bool bValue = true; string strCheck = strInput.ToString(); if (strCheck.Length == 0) return false; for (int i = 0; i < strCheck.Length; i++) { if (!char.IsDigit(strCheck, i)) { bValue = false; break; } } return bValue; } /// <summary> /// 返回指定數(shù)據(jù)的重復次數(shù) /// </summary> /// <param name="objInt">int型數(shù)據(jù)</param> /// <param name="strRepeat">重復的字符片段</param> /// <returns>Example:ReplicateObject(5,"*")="*****"</returns> public static string ReplicateObject(object objInt, string strRepeat) { string strRet = string.Empty; if (objInt != null) { int Count = Convert.ToInt32(objInt); strRet = (Count > 0) ? (new string('*', Count)) : ""; } else { strRet = ""; } return strRet.Replace("*", strRepeat); } /// <summary> /// 截取HTML左邊字符 /// </summary> /// <param name="objString">截取對象</param> /// <param name="length">長度</param> /// <returns>相應的普通文本</returns> public static string HTMLLeft(object objString, int length) { if (objString == null) return string.Empty; string strGet = objString.ToString(); string strPattern = "<.[^<]*>"; if (Regex.IsMatch(strGet, strPattern, RegexOptions.IgnoreCase)) { strGet = Regex.Replace(strGet, strPattern, "", RegexOptions.IgnoreCase); } return (strGet.Length >= length) ? strGet.Substring(0, length) + "..." : strGet; } /// <summary> /// 智能格式化文本\判斷文本還是HTML文本 /// </summary> /// <param name="objString">要格式化排版的對象</param> /// <returns>如果是文本則輸出文本的相應HTML格式,若為HTML格式則不變。</returns> public static string SmartFormat(object objString) { if (objString == null) return string.Empty; string strGet = objString.ToString(); string strPattern = "<.[^<]*>"; if (!Regex.IsMatch(strGet, strPattern, RegexOptions.IgnoreCase)) { strGet = Text2Html(strGet); } return strGet; } /// <summary> /// 普通文本轉(zhuǎn)換為HTML格式 /// </summary> /// <param name="objInput">轉(zhuǎn)換文本對象</param> /// <returns>格式化的HTML格式</returns> public static string Text2Html(object objInput) { if (objInput == null) return string.Empty; string strResult = objInput.ToString(); // xml escape strResult = strResult.Replace("&", "&"); strResult = strResult.Replace("<", "<"); strResult = strResult.Replace(">", ">"); strResult = strResult.Replace("'", "'"); strResult = strResult.Replace("\"", """); // Simple Transfer strResult = strResult.Replace("\r\n", "<br>"); strResult = strResult.Replace("\n", "<br>"); strResult = strResult.Replace("\r", "<br>"); strResult = strResult.Replace(" ", " "); return strResult; } /// <summary> /// HTML格式文本轉(zhuǎn)換為普通文本 /// </summary> /// <param name="objInput">轉(zhuǎn)換HTML文本對象</param> /// <returns>格式化的普通文本</returns> public static string Html2Text(object objInput) { if (objInput == null) return string.Empty; string strResult = objInput.ToString(); // <p> <br> strResult = Regex.Replace(strResult, " ?", " ", RegexOptions.IgnoreCase); strResult = Regex.Replace(strResult, "<p\\s?[^>]*>", "\n\n", RegexOptions.IgnoreCase); strResult = Regex.Replace(strResult, "<BR\\s?/?>", "\n", RegexOptions.IgnoreCase); strResult = Regex.Replace(strResult, "</p>", "", RegexOptions.IgnoreCase); // Other < > wrapped strResult = Regex.Replace(strResult, "<.[^<]*>", "", RegexOptions.IgnoreCase); // xml unescape strResult = strResult.Replace("<", "<").Replace(">", ">"); strResult = strResult.Replace("'", "'").Replace(""", "\""); strResult = strResult.Replace("&", "&"); return strResult; } /// <summary> /// 獲取定長像素的網(wǎng)頁片段,多余部分用省略號代替。(ellipsis) /// </summary> /// <param name="htmlText">片段內(nèi)容</param> /// <param name="width">片段長度</param> /// <returns>相關(guān)屬性樣式的DIV片段</returns> /// <remarks>2008-1-29 by Ridge Wong</remarks> public static string GetFixedDivEllipsis(string htmlText, int width) { return string.Format("<div style=\"width:{0}px;overflow:hidden;float:left;text-overflow:ellipsis;white-space:nowrap;\">{1}</div>", width, htmlText); } /// <summary> /// 去掉小數(shù)位后無意義的0,如21.50結(jié)尾為21.5。 /// </summary> /// <param name="pointNum">金額綁定對象</param> /// <returns>相關(guān)小數(shù)點金額</returns> public static string StripZeroEnd(object pointNum) { if (pointNum == null) { return "0"; } return Regex.Replace(pointNum.ToString(), @"(\.)?0{1,}$", ""); } #endregion 字符文本類 #region 邏輯判斷類 /// <summary> /// 空值顯示替換 /// </summary> /// <param name="objOrigin">來源對象</param> /// <param name="strOriginal">來源對象拷貝或處理對象</param> /// <param name="strReplace">替換對象</param> /// <returns>相應文本輸出</returns> public static string GetEmptyShow(object objOrigin, object strOriginal, string strReplace) { string strRet = string.Empty; strRet = (objOrigin != null && objOrigin.ToString().Trim() != string.Empty) ? strOriginal.ToString() : strReplace; return strRet; } /// <summary> /// 獲取滿足條件的相應值 /// </summary> /// <param name="Expression">布爾表達式</param> /// <param name="strTrue">為真時返回的字符</param> /// <param name="strFalse">為假時返回的字符</param> /// <returns>相應條件的字符值</returns> public static string GetWhich(bool Expression, string strTrue, string strFalse) { return (Expression == true) ? strTrue : strFalse; } /// <summary> /// 表單選擇判斷 /// </summary> /// <param name="objQuery">來源對象</param> /// <param name="strMatch">匹配項</param> /// <param name="allowNull">可以為Null對象</param> /// <param name="strValue">返回文本輸出</param> /// <returns>相應文本輸出</returns> public static string GetDefaultValue(object objQuery, string strMatch, bool allowNull, string strValue) { string strRet = string.Empty; if (objQuery == null) { if (allowNull == true) strRet = strValue; } else { if ((objQuery.ToString() == strMatch) || (objQuery.ToString() == string.Empty && allowNull == true)) { strRet = strValue; } } return strRet; } #endregion 邏輯判斷類 } }