2015年11月20日 星期五

asp.Net ObjectDataSource output parameter

一個查詢功能
有與DB溝通的Class,查詢方法會回拋DataTable

前端做GridView+ObjectDataSource

現在想要做後端驗證

驗證的方式是在傳入參數加入一個自訂類別 myValidClass的 output參數叫msg
在函式開頭就會先做驗證
有錯誤的時候msg的status屬性就會是false
並且msg的msg屬性會塞錯誤訊息

在網頁端的ODS加上
<asp:Parameter Type="Object" Direction="Output" Name="msg" />

並且加入OnSelected方法ods_Selected
<asp:ObjectDataSource runat="server" ID="ods" .... OnSelected="ods_Selected">

.cs端的ods_Selected方法
<div>
protected void ods_Selected(object sender, ObjectDataSourceStatusEventArgs e)</div>
<div>
&nbsp; &nbsp; {</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;myValidClass&nbsp;msg = (myValidClass)e.OutputParameters["msg"];</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; if (!msg.status)</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alert", "alert('"+msg.msg+"');", true);</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div>
&nbsp; &nbsp; }</div>

DB溝通class的方法

<div>
public DataTable search(string parameter1, out&nbsp;myValidClass&nbsp;msg)</div>
<div>
{</div>
<div>
&nbsp; &nbsp; DataTable dt=new DataTable();</div>
<div>
&nbsp; &nbsp; //Do your validate method</div>
<div>
&nbsp; &nbsp; msg=new myValidClass();</div>
<div>
&nbsp; &nbsp; msg.status=true;</div>
<div>
&nbsp; &nbsp; if(string.IsNullOrEmpty(parameter1))</div>
<div>
&nbsp; &nbsp; {</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; msg.status=false;</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; msg.msg="參數1不可為空";</div>
<div>
&nbsp; &nbsp; }</div>
<div>
&nbsp; &nbsp; if(msg.status)</div>
<div>
&nbsp; &nbsp; {</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; dt=db.getData(parameter1);</div>
<div>
&nbsp; &nbsp; }</div>
<div>
&nbsp; &nbsp; return dt;</div>
<div>
}</div>

這樣在做完查詢後ods_Selected方法就會檢查msg有沒有錯誤,
有錯誤就會alert錯誤訊息

2015年11月18日 星期三

[C#][擴充方法] 取得西元日期的民國年月日

&nbsp; &nbsp; &nbsp; &nbsp; /// <summary> 將西元日期轉民國日期 回傳 字串陣列[0]民國年YYY [1]月MM [2]日DD</summary>
&nbsp; &nbsp; &nbsp; &nbsp; /// <param name="datetime">要轉換的日期</param>
&nbsp; &nbsp; &nbsp; &nbsp; /// <returns>字串陣列[0]民國年YYY [1]月MM [2]日DD</returns>
&nbsp; &nbsp; &nbsp; &nbsp; public static string[] ToSimpleTaiwanDate(this DateTime datetime)
&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TaiwanCalendar taiwanCalendar = new TaiwanCalendar();

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return new string[]{
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; taiwanCalendar.GetYear(datetime).ToString(),
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datetime.Month.ToString().PadLeft(2,'0'),
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datetime.Day.ToString().PadLeft(2,'0')};
&nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; &nbsp; &nbsp; /// <summary> 將西元日期轉民國日期 回傳 字串陣列[0]民國年YYY [1]月MM [2]日DD</summary>
&nbsp; &nbsp; &nbsp; &nbsp; /// <param name="datetime">要轉換的日期</param>
&nbsp; &nbsp; &nbsp; &nbsp; /// <returns>字串陣列[0]民國年YYY [1]月MM [2]日DD</returns>
&nbsp; &nbsp; &nbsp; &nbsp; public static string ToSimpleTaiwanDate_YYYMMDD(this DateTime datetime)
&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TaiwanCalendar taiwanCalendar = new TaiwanCalendar();

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; taiwanCalendar.GetYear(datetime).ToString()+
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datetime.Month.ToString().PadLeft(2,'0')+
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datetime.Day.ToString().PadLeft(2,'0');
&nbsp; &nbsp; &nbsp; &nbsp; }

[C#][擴充方法] 取得日期的統一發票期別


        /// <summary> 傳入日期傳出發票期別的兩個數字 [1 2] [3 4]...</summary>
&nbsp; &nbsp; &nbsp; &nbsp; /// <param name="datetime">要判斷的日期</param>
&nbsp; &nbsp; &nbsp; &nbsp; /// <returns> 整數陣列[0]期別第一個月份 [1]期別第二個月份 </returns>
&nbsp; &nbsp; &nbsp; &nbsp; public static int[] ToInvoiceMonthRange(this DateTime datetime)
&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //2 4 6 8...->餘0 ->[2-1,2][4-1,4]
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //1 3 5 7...->餘1 ->[1,1+1][3,3+1]
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (datetime.Month % 2) == 0
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ? new int[] { datetime.Month - 1, datetime.Month }
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : (datetime.Month % 2) == 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ? new int[] { datetime.Month, datetime.Month+1 }
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : new int[] { 0, 0 };
&nbsp; &nbsp; &nbsp; &nbsp; }