Popular Posts
javax.net.ssl.SSLHandshakeException: Connection closed by peer in Android 5.0 Lollipop Recently, there is a error occurs when access website via ssl connection like below although it worked fine several days ago. // Enable SSL... Enable SSL connection for Jsoup import org.jsoup.Connection; import org.jsoup.Jsoup; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagement... set/remove cookie using applet jdk/jre 1.4 later, the library is included in plugin.jar file. import java.applet.Applet; import java.util.ArrayList; import java.util.Date;...
Blog Archive
Stats
ADD ... THEN ... UNTIL ...
  1. data: begin of SERIES,
  2. N1 type I value 10,
  3. N2 type I value 20,
  4. N3 type I value 30,
  5. N4 type I value 40,
  6. N5 type I value 50,
  7. N6 type I value 60,
  8. end of SERIES.
  9. data SUM type I.
  10. add SERIES-N1 then SERIES-N2 until SERIES-N5 giving SUM.
  11. write SUM.
  12. add SERIES-N2 then SERIES-N3 until SERIES-N6 to SUM.
  13. write / SUM.
output:
       150
       350
Horizontal, vertical line and space
  1. * Horizontal line
  2. write sy-uline.
  3. write '------'.
  4. uline.
  5.  
  6. * Vertical line
  7. write sy-vline.
  8. write '|'.
  9.  
  10. * space
  11. skip 3.
  12. skip to line 10.
WRITE: format option
通用格式化選項
選項 用途選項
LEFT-JUSTIFIED 輸出對左對齊
CENTERED 輸出置中對齊
RIGHT-JUSTIFIED 輸出對右對齊
UNDER <g> 輸出至<g>下方
NO-GAP 忽略輸出後方的間格空格
USING EDIT MASK <m> 指定輸出格式
USING NO EDIT MASK 取消abap dictionary中定義的輸出格式
NO-ZERO 取消前導的'0'以空格替代

數值格式化選項
選項 用途選項
NO-SIGN 取消前置符號
DECIMALS <d> 定義小數位數
EXPONENT <e> 定義資料類型F中的冪數
ROUND <r> 四拾五入至指定位數
CURRENCY <c> 以TCURX表中定義的貨幣格式化
UNIT <u> 按表格T006中為類型P欄位所指定的單位<u>固定小數位數

日期格式化選項
選項 用途選項
DD/MM/YY 以系統設定的分隔符號格式化
MM/DD/YY 以系統設定的分隔符號格式化
DD/MM/YYYY 以系統設定的分隔符號格式化
MM/DD/YYYY 以系統設定的分隔符號格式化
DDMMYY 無分隔符號格式化
MMDDYY 無分隔符號格式化
YYMMDD 無分隔符號格式化
Data type
資料類型 預設大小 大小 初始值 輸出長度 輸出定位 說明
C 1 1-65535 SPACE 字串長度 LEFT-JUSTIFIED 字元,字串
D 8 8 '00000000' 8 LEFT-JUSTIFIED 日期
F 8 8 0 24 RIGHT-JUSTIFIED 浮點數
I 4 4 0 11 RIGHT-JUSTIFIED 整數
N 1 1-65535 '000...0' 字串長度 LEFT-JUSTIFIED 數值字串
P 8 1-16 0 2*字串長度+1 RIGHT-JUSTIFIED 壓縮號
T 6 6 '000000' 6 LEFT-JUSTIFIED 時間
X 1 1-65536 X'00' 2*字串長度 LEFT-JUSTIFIED 16進制
abap naming rule
命名規則
  • 報表程式(以列表格式輸出資料分析):Yaxxxxxx或Zaxxxxxx。用應用程式區的分類字母替換a。
    任何有效字元替換x。注意SAP報表程式遵守相似的命名約定:Raxxxxxx。
  • 任何其他ABAP/4程式(培訓程式或事務程式):SAPMYxxx或SAPMZxxx。用有效字元替換x。
    注意標準SAPABAP/4程式遵守相似的命名約定:SAPMaxxx,其中a代表某應用程式區。
for xml usage
  1. SELECT
  2. p.[product_name],
  3. p.[product_imgstyle],
  4. p.[product_color],
  5. p.[product_size],
  6. p.[product_weight],
  7. p.[product_desc],
  8. (
  9. SELECT l.[purchase_url], s.[store_name], s.[display_order]
  10. FROM [Product_StoreLink] l, [Store] s
  11. WHERE l.[store_id] = s.[store_id] AND l.[product_id] = p.[product_id]
  12. FOR XML RAW
  13. ) store
  14. FROM Product p
Tab control using url hash variant
Default.aspx
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head runat="server">
  6.     <title>anchor test with tab design</title>
  7.     <style type="text/css">
  8.         ul.tab
  9.         {
  10.             margin: 1px 0px;
  11.             padding: 0px;
  12.         }
  13.         ul.tab li
  14.         {
  15.             display: inline;
  16.         }
  17.         ul.tab li a
  18.         {
  19.             padding: 3px;
  20.             margin-right: 2px;
  21.             background-color: #eee;
  22.             border: 1px outset gray;
  23.             font-size: small;
  24.             color: Blue;
  25.         }
  26.         ul.tab li a:hover
  27.         {
  28.             background-color: gold;
  29.         }
  30.         ul.tab li a.active_tab
  31.         {
  32.             background-color: Orange;
  33.         }
  34.         
  35.         div.tab_container
  36.         {
  37.             border: 1px solid gray;
  38.             padding: 10px;
  39.         }
  40.         
  41.         a
  42.         {
  43.             text-decoration: none;
  44.         }
  45.         a:hover
  46.         {
  47.             text-decoration: underline;
  48.         }
  49.     </style>
  50.     <script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"></script>
  51.     <script type="text/javascript">
  52.         function tab_change() {
  53.             // 頁籤序號
  54.             var index = location.hash.substring(1);
  55.             if (!index) index = '0';
  56.             index = parseInt(index);
  57.  
  58.             // 變更頁籤css
  59.             $('ul.tab li a').removeClass('active_tab').eq(index).addClass('active_tab');
  60.  
  61.             // postback, 以觸發update panel更新
  62.             //$('<%=hdnTabIndex.ClientID%>').val(index);
  63.             __doPostBack('hdnTabIndex', index);
  64.         }
  65.         $(function () {
  66.             // 頁籤變更觸發
  67.             $(window).bind('hashchange', tab_change);
  68.             // 載入頁面時更新
  69.             tab_change();
  70.         });
  71.         
  72.     </script>
  73. </head>
  74. <body>
  75.     <form id="form1" runat="server">
  76.     <asp:ScriptManager ID="smPage" runat="server">
  77.     </asp:ScriptManager>
  78.     <ul class="tab">
  79.         <li><a href="#0" class="active_tab">第一頁</a></li>
  80.         <li><a href="#1">第二頁</a></li>
  81.         <li><a href="#2">第三頁</a></li>
  82.         <li><a href="#3">第四頁</a></li>
  83.         <li><a href="#4">第五頁</a></li>
  84.     </ul>
  85.     <div class="tab_container">
  86.         <asp:UpdatePanel ID="upTabContainer" runat="server" UpdateMode="Conditional" RenderMode="Block">
  87.             <ContentTemplate>
  88.                 <asp:HiddenField ID="hdnTabIndex" runat="server" />
  89.                 <asp:Panel ID="plTabContainer0" runat="server" Visible="false">
  90.                     第一頁內容
  91.                 </asp:Panel>
  92.                 <asp:Panel ID="plTabContainer1" runat="server" Visible="false">
  93.                     第二頁內容
  94.                 </asp:Panel>
  95.                 <asp:Panel ID="plTabContainer2" runat="server" Visible="false">
  96.                     第三頁內容
  97.                 </asp:Panel>
  98.                 <asp:Panel ID="plTabContainer3" runat="server" Visible="false">
  99.                     第四頁內容
  100.                 </asp:Panel>
  101.                 <asp:Panel ID="plTabContainer4" runat="server" Visible="false">
  102.                     第五頁內容
  103.                 </asp:Panel>
  104.             </ContentTemplate>
  105.         </asp:UpdatePanel>
  106.     </div>
  107.     </form>
  108. </body>
  109. </html>
Default.aspx.cs
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7.  
  8. namespace WebApplication1
  9. {
  10.     public partial class _Default : System.Web.UI.Page
  11.     {
  12.         protected void Page_Load(object sender, EventArgs e)
  13.         {
  14.             Tab_Load();
  15.         }
  16.  
  17.         protected void Tab_Load()
  18.         {
  19.             // postback參數
  20.             string _index = Request.Form["__EVENTARGUMENT"];
  21.             if (string.IsNullOrEmpty(_index)) _index = "0";
  22.  
  23.             plTabContainer0.Visible = false;
  24.             plTabContainer1.Visible = false;
  25.             plTabContainer2.Visible = false;
  26.             plTabContainer3.Visible = false;
  27.             plTabContainer4.Visible = false;
  28.             upTabContainer.FindControl("plTabContainer" + _index).Visible = true;
  29.         }
  30.     }
  31. }
Speed up VisualStudio using RAMDisk
STEP:
  1. Install RAMDisk and create a ramdisk r:
  2. Create a batch file and setting temp variant:
    @echo off
    set tmp=r:\
    set temp=r:\
    call "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"
  3. edit web.config
    <compilation debug="true" tempDirectory="r:\">
String.replaceAll()
  1. String.prototype.replaceAll = function(oldValue, newValue) {
  2.     return this.split(oldValue).join(newValue);
  3. }
Register User Controls and Custom Controls in Web.config
  1. <system.web>
  2.     <pages>
  3.         <controls>
  4.             <add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/>
  5.             <add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/>
  6.             <add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/>
  7.         </controls>
  8.     </pages>
  9. </system.web>
Parse query string
  1. Uri url = new Uri("http://www.google.com.tw/search?sourceid=chrome&ie=UTF-8&q=uri");
  2.  
  3. System.Collections.Specialized.NameValueCollection queryString
  4.     = System.Web.HttpUtility.ParseQueryString(url.Query);
  5.  
  6. Console.WriteLine(queryString.Get("sourceid"));
  7. Console.WriteLine(queryString.Get("ie"));
script path in master page
use script manager (script will appear in body section)
  1. <asp:ScriptManager ID="ScriptManager1" runat="server">
  2.     <Scripts>
  3.         <asp:ScriptReference Path="~/jquery.js" />
  4.     </Scripts>
  5. </asp:ScriptManager>
use ResolveClientUrl method
  1. <script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>
asp.net form validate
  1. // 確認更新
  2. function confirmUpdate(
  3.     confirmMessage, /* 確認訊息 */
  4.     validateGroup, /* validate group*/
  5.     fn /* 自訂欄位檢查function */
  6. ) {
  7.     if ('undefined' != typeof (tinyMCE)) tinyMCE.triggerSave(); // 觸發tinyMCE儲存值
  8.     if ('undefined' != typeof (validateGroup)) validateGroup = null;
  9.     if ('function' != typeof (fn)) fn = function () { return true; }  // 自訂驗證的function, 若無則回傳true
  10.     if ('function' != typeof (Page_ClientValidate)) var Page_ClientValidate = function (group) { return true; } // validate control驗證
  11.     if ($(document.forms[0]).valid2() && Page_ClientValidate(validateGroup)) {
  12.         return fn() && confirm(confirmMessage);
  13.     } else {
  14.         return false;
  15.     }
  16. }
Retire value from tinyMCE when jQuery validate valid() invoked
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="superspace.usercontrols.WebForm2" ValidateRequest="false" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head runat="server">
  6.     <title>tinyMCE + jQuery validate</title>
  7.     <!-- jQuery -->
  8.     <script src="<%=VirtualPathUtility.ToAbsolute("~/")%>js/jquery-1.6.2.min.js" type="text/javascript"></script>
  9.     <!-- jQuery validate + metadata -->
  10.     <script src="<%=VirtualPathUtility.ToAbsolute("~/")%>js/jquery.validate/jquery.metadata.min.js" type="text/javascript"></script>
  11.     <script src="<%=VirtualPathUtility.ToAbsolute("~/")%>js/jquery.validate/jquery.validate.min.js" type="text/javascript"></script>
  12.     <script src="<%=VirtualPathUtility.ToAbsolute("~/")%>js/jquery.validate/jquery.validate.ext.min.js" type="text/javascript"></script>
  13.     <!-- tinyMCE Editor -->
  14.     <script src="<%=VirtualPathUtility.ToAbsolute("~/")%>js/tiny_mce/tiny_mce.js" type="text/javascript"></script>
  15.     <script src="<%=VirtualPathUtility.ToAbsolute("~/")%>js/tiny_mce/jquery.tinymce.js" type="text/javascript"></script>
  16.     <style type="text/css">
  17.         body
  18.         {
  19.             font-size: smaller;
  20.         }
  21.     </style>
  22.     <script type="text/javascript">
  23.         $(function () {
  24.             $('.txtContent').tinymce({
  25.                 theme: "advanced",
  26.                 language: "zh",
  27.                 theme_advanced_toolbar_location: "top",
  28.                 theme_advanced_toolbar_align: "left",
  29.                 theme_advanced_statusbar_location: "bottom",
  30.                 theme_advanced_resizing: true
  31.             });
  32.             $(document.forms).validate();
  33.         });
  34.         function confirmUpdate() {
  35.             if (typeof (tinyMCE) != 'undefined') tinyMCE.triggerSave();
  36.             if (!$(document.forms).valid()) return false;
  37.             return true;
  38.         }
  39.     </script>
  40. </head>
  41. <body>
  42.     <form id="form1" runat="server">
  43.     <h3>
  44.         Force tinyMCE editor to save content to control, avoid validate error when valid() has been invoked;</h3>
  45.     <table border="0">
  46.         <tr>
  47.             <td>
  48.                 <b style="color: Red;">*</b>標題
  49.             </td>
  50.             <td>
  51.                 <asp:TextBox ID="txtTitle" runat="server" CssClass="{required:true,messages:{required:'請填寫標題!'}}" />
  52.             </td>
  53.         </tr>
  54.         <tr>
  55.             <td valign="top">
  56.                 <b style="color: Red;">*</b>內容
  57.             </td>
  58.             <td>
  59.                 <asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine" Width="100%" Rows="15" CssClass="txtContent {required:true,messages:{required:'請填寫內容!'}}" />
  60.             </td>
  61.         </tr>
  62.         <tr>
  63.             <td align="center" colspan="2">
  64.                 <asp:Button ID="btnSubmit" runat="server" Text="儲存" OnClientClick="return confirmUpdate();" />
  65.             </td>
  66.         </tr>
  67.     </table>
  68.     </form>
  69. </body>
  70. </html>
jQuery validator: focus invalid field when calling valid()
  1. /*
  2.  * 在validate呼叫valid()驗證方法式, 加上focusInValid的動件
  3.  */
  4. (function($) {
  5.     $.extend($.fn, {
  6.         valid2 : function() {
  7.             var valid = true;
  8.             var validator;
  9.             if ($(this[0]).is('form')) {
  10.                 validator = this.validate();
  11.                 valid = this.validate().form();
  12.             } else {
  13.                 validator = $(this[0].form).validate();
  14.                 this.each(function() {
  15.                     valid &= validator.element(this);
  16.                 });
  17.             }
  18.             if (!valid)
  19.                 validator.focusInvalid();
  20.             return valid;
  21.         }
  22.     });
  23.  
  24.     // 新增一個 regex 的驗證方式
  25.     $.validator.methods.regex = function(value, element, param) {
  26.         return this.optional(element) || ((typeof(param) == 'function' && typeof(param.test) == 'function') ? param.test(value) : new RegExp(param).test(value));
  27.     };
  28.     $.validator.messages.regex = 'Please enter a valid value.';
  29. })(jQuery);
Add a event to Outlook calendar dymatically
  1. protected void btnAddEventToOutlook_Click(object sender, EventArgs e)
  2. {
  3.     Response.Clear();
  4.     Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.ics", HttpUtility.UrlEncode(EventName, Response.HeaderEncoding)));
  5.  
  6.     Response.Write(string.Format(@"BEGIN:VCALENDAR
  7. METHOD:PUBLISH
  8. PRODID:-//{0}//NONSGML iCalcreator 2.6//ZH_TW
  9. VERSION:2.0
  10. X-WR-CALNAME;LANGUAGE=zh_tw:有 {1} 筆相關活動
  11. BEGIN:VEVENT
  12. UID:{2}
  13. DTSTAMP:{3:yyyyMMddTHHmmss}Z
  14. DESCRIPTION;LANGUAGE=zh_tw:{4}
  15. DTSTART;TZID=TAIWAN:{5:yyyyMMddTHHmmss}
  16. DTEND;TZID=TAIWAN:{6:yyyyMMddTHHmmss}
  17. LOCATION;LANGUAGE=zh_tw:{7}
  18. SUMMARY;LANGUAGE=zh_tw:{8}
  19. URL;VALUE=URI:{9}
  20. END:VEVENT
  21. END:VCALENDAR",
  22.         Request.Url.Host,
  23.         PlaceCount,
  24.         Request.QueryString["oid"],
  25.         DateTime.Now,
  26.         Description,
  27.         Convert.ToDateTime(FromDate),
  28.         Convert.ToDateTime(ToDate),
  29.         Location,
  30.         EventName,
  31.         Request.Url));
  32.     Response.End();
  33. }
about ics file
Add a event to Google Calendar dynamically
  1. hlGoogle.NavigateUrl = string.Format(
  2.     "https://www.google.com/calendar/render?action=TEMPLATE&text={0}&dates={1:yyyyMMddTHHmmss}/{2:yyyyMMddTHHmmss}&sprop=website:{3}&location={4}&details={5}",
  3.     EventName,
  4.     Convert.ToDateTime(FromDate),
  5.     Convert.ToDateTime(ToDate),
  6.     Request.Url.Host,
  7.     Location,
  8.     Details
  9. );
ObjectDataSource
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ObjectDataSourceSample.aspx.cs"
  2.     Inherits="superspace.control.info.ObjectDataSourceSample" %>
  3.  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7.     <title></title>
  8. </head>
  9. <body>
  10.     <form id="form1" runat="server">
  11.     <div>
  12.         <asp:HiddenField ID="hdnContentId" runat="server" />
  13.         <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
  14.             DeleteMethod="Delete"
  15.             InsertMethod="Insert"
  16.             SelectMethod="Select"
  17.             UpdateMethod="Update"
  18.             OldValuesParameterFormatString="{0}"
  19.             TypeName="SuperspaceLib.VoteOption">
  20.             <DeleteParameters>
  21.                 <asp:Parameter Name="ContentId" Type="String" />
  22.                 <asp:Parameter Name="OptionID" Type="String" />
  23.             </DeleteParameters>
  24.             <InsertParameters>
  25.                 <asp:Parameter Name="ContentId" Type="String" />
  26.                 <asp:Parameter Name="OptionID" Type="String" />
  27.                 <asp:Parameter Name="OptionName" Type="String" />
  28.             </InsertParameters>
  29.             <SelectParameters>
  30.                 <asp:ControlParameter ControlID="hdnContentId" Name="ContentId" PropertyName="Value"
  31.                     Type="String" />
  32.             </SelectParameters>
  33.             <UpdateParameters>
  34.                 <asp:Parameter Name="ContentId" Type="String" />
  35.                 <asp:Parameter Name="OptionID" Type="String" />
  36.                 <asp:Parameter Name="OptionName" Type="String" />
  37.             </UpdateParameters>
  38.         </asp:ObjectDataSource>
  39.         <asp:TextBox ID="txtVoteOption" runat="server" MaxLength="50" Style="width: 100%;" />
  40.         <asp:Button ID="btnAddOption" runat="server" Text="新增" OnClick="btnAddOption_Click" />
  41.         <asp:GridView ID="gvOptions" runat="server" AutoGenerateColumns="False" GridLines="None"
  42.             ShowHeader="False" DataKeyNames="ContentId,OptionID" EnableModelValidation="True"
  43.             DataSourceID="ObjectDataSource1">
  44.             <Columns>
  45.                 <asp:BoundField DataField="OptionName" HeaderText="OptionName" SortExpression="OptionName" />
  46.                 <asp:TemplateField ShowHeader="False">
  47.                     <ItemTemplate>
  48.                         <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"
  49.                             Text="編輯"></asp:LinkButton>
  50.                         &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete"
  51.                             Text="刪除"></asp:LinkButton>
  52.                     </ItemTemplate>
  53.                     <EditItemTemplate>
  54.                         <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"
  55.                             Text="更新"></asp:LinkButton>
  56.                         &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"
  57.                             Text="取消"></asp:LinkButton>
  58.                     </EditItemTemplate>
  59.                 </asp:TemplateField>
  60.             </Columns>
  61.         </asp:GridView>
  62.     </div>
  63.     </form>
  64. </body>
  65. </html>
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Web;
  8.  
  9. namespace SuperspaceLib
  10. {
  11.     [DataObject(true)]
  12.     public class VoteOption
  13.     {
  14.         [DataObjectMethod(DataObjectMethodType.Select)]
  15.         public DataTable Select(string ContentId)
  16.         {
  17.             DataTable dtOption = null;
  18.             if (HttpContext.Current.Session[ContentId] == null)
  19.             {
  20.                 dtOption = new DataTable("VoteOption");
  21.                 dtOption.Columns.Add("ContentId");
  22.                 dtOption.Columns.Add("OptionID");
  23.                 dtOption.Columns.Add("OptionName");
  24.             }
  25.             else
  26.             {
  27.                 dtOption = HttpContext.Current.Session[ContentId] as DataTable;
  28.             }
  29.             return dtOption;
  30.         }
  31.  
  32.         [DataObjectMethod(DataObjectMethodType.Update)]
  33.         public int Update(string ContentId, string OptionID, string OptionName)
  34.         {
  35.             DataTable dtOption = null;
  36.             if (HttpContext.Current.Session[ContentId] == null)
  37.             {
  38.                 dtOption = new DataTable("VoteOption");
  39.                 dtOption.Columns.Add("ContentId");
  40.                 dtOption.Columns.Add("OptionID");
  41.                 dtOption.Columns.Add("OptionName");
  42.             }
  43.             else
  44.             {
  45.                 dtOption = HttpContext.Current.Session[ContentId] as DataTable;
  46.             }
  47.  
  48.             int afftected = 0;
  49.             foreach (DataRow row in dtOption.Rows)
  50.             {
  51.                 if (row["ContentId"].Equals(ContentId) && row["OptionID"].Equals(OptionID))
  52.                 {
  53.                     row["OptionName"] = OptionName;
  54.                     afftected++;
  55.                 }
  56.             }
  57.             HttpContext.Current.Session[ContentId] = dtOption;
  58.  
  59.             return afftected;
  60.         }
  61.  
  62.         [DataObjectMethod(DataObjectMethodType.Insert)]
  63.         public int Insert(string ContentId, string OptionID, string OptionName)
  64.         {
  65.             DataTable dtOption = null;
  66.             if (HttpContext.Current.Session[ContentId] == null)
  67.             {
  68.                 dtOption = new DataTable("VoteOption");
  69.                 dtOption.Columns.Add("ContentId");
  70.                 dtOption.Columns.Add("OptionID");
  71.                 dtOption.Columns.Add("OptionName");
  72.             }
  73.             else
  74.             {
  75.                 dtOption = HttpContext.Current.Session[ContentId] as DataTable;
  76.             }
  77.  
  78.             DataRow row = dtOption.Rows.Add(ContentId, OptionID, OptionName);
  79.             HttpContext.Current.Session[ContentId] = dtOption;
  80.  
  81.             return 1;
  82.         }
  83.  
  84.         [DataObjectMethod(DataObjectMethodType.Delete)]
  85.         public int Delete(string ContentId, string OptionID)
  86.         {
  87.             DataTable dtOption = null;
  88.             if (HttpContext.Current.Session[ContentId] == null)
  89.             {
  90.                 dtOption = new DataTable("VoteOption");
  91.                 dtOption.Columns.Add("ContentId");
  92.                 dtOption.Columns.Add("OptionID");
  93.                 dtOption.Columns.Add("OptionName");
  94.             }
  95.             else
  96.             {
  97.                 dtOption = HttpContext.Current.Session[ContentId] as DataTable;
  98.             }
  99.  
  100.             int afftected = 0;
  101.             for (int i = dtOption.Rows.Count - 1; i >= 0; i--)
  102.             {
  103.                 DataRow row = dtOption.Rows[i];
  104.                 if (row["ContentId"].Equals(ContentId) && row["OptionID"].Equals(OptionID))
  105.                 {
  106.                     dtOption.Rows.Remove(row);
  107.                     afftected++;
  108.                 }
  109.             }
  110.             HttpContext.Current.Session[ContentId] = dtOption;
  111.  
  112.             return afftected;
  113.         }
  114.     }
  115. }
HINT:
  • OldValuesParameterFormatString="{0}" means parameter will take value of old value by this name format
  • Parameter name must compeletly match the param of method
UpdatePanel in Formview occurs duplicate component id error
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="InnerUpdatePanel.aspx.cs"
  2.     Inherits="superspace.control.info.InnerUpdatePanel" %>
  3.  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7.     <title></title>
  8. </head>
  9. <body>
  10.     <form id="form1" runat="server">
  11.     <div>
  12.         <asp:FormView ID="fvVote" runat="server" DefaultMode="Insert">
  13.             <InsertItemTemplate>
  14.                 <asp:TextBox ID="txtVoteName" runat="server" />
  15.                 <asp:UpdatePanel ID="upOption" runat="server" UpdateMode="Conditional">
  16.                     <ContentTemplate>
  17.                         <table border="0" width="100%">
  18.                             <tr>
  19.                                 <td>
  20.                                     <asp:TextBox ID="txtOption" runat="server" />
  21.                                 </td>
  22.                                 <td>
  23.                                     <asp:Button ID="btnAddOption" runat="server" Text="新增選項" />
  24.                                 </td>
  25.                             </tr>
  26.                         </table>
  27.                     </ContentTemplate>
  28.                 </asp:UpdatePanel>
  29.             </InsertItemTemplate>
  30.             <EditItemTemplate>
  31.                 <asp:TextBox ID="txtVoteName" runat="server" />
  32.                 <asp:UpdatePanel ID="upOption" runat="server" UpdateMode="Conditional">
  33.                     <ContentTemplate>
  34.                         <table border="0" width="100%">
  35.                             <tr>
  36.                                 <td>
  37.                                     <asp:TextBox ID="txtOption" runat="server" />
  38.                                 </td>
  39.                                 <td>
  40.                                     <asp:Button ID="btnAddOption" runat="server" Text="新增選項" />
  41.                                 </td>
  42.                             </tr>
  43.                         </table>
  44.                     </ContentTemplate>
  45.                 </asp:UpdatePanel>
  46.             </EditItemTemplate>
  47.         </asp:FormView>
  48.     </div>
  49.     </form>
  50. </body>
  51. </html>
Solutions:
  1. Remove update panel
  2. Create a user control wrapping update panel
Test mail sender
  1. import java.awt.Dimension;
  2. import java.awt.GridBagConstraints;
  3. import java.awt.GridBagLayout;
  4. import java.awt.Insets;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.io.IOException;
  8. import java.io.OutputStream;
  9. import java.io.PrintStream;
  10.  
  11. import javax.swing.BorderFactory;
  12. import javax.swing.JButton;
  13. import javax.swing.JCheckBox;
  14. import javax.swing.JFrame;
  15. import javax.swing.JLabel;
  16. import javax.swing.JPanel;
  17. import javax.swing.JPasswordField;
  18. import javax.swing.JScrollPane;
  19. import javax.swing.JTextArea;
  20. import javax.swing.JTextField;
  21.  
  22. import bruce.lib.swing.SwingWrench;
  23. import bruce.lib.util.DateTime;
  24. import bruce.lib.util.PostCenter;
  25.  
  26. public class PostMan extends JFrame {
  27.  
  28.     JTextField txtIP;
  29.     JTextField txtPort;
  30.     JTextField txtAccount;
  31.     JPasswordField txtPassword;
  32.  
  33.     JTextField txtSenderMail;
  34.     JTextField txtSednerName;
  35.     JTextField txtReceiverMail;
  36.  
  37.     JCheckBox cbIsHtml;
  38.     JTextField txtSubject;
  39.     JTextArea txtBody;
  40.  
  41.     JButton btnSubmit;
  42.  
  43.     JTextArea txtConsole;
  44.  
  45.     public PostMan() {
  46.         setLayout(new GridBagLayout());
  47.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  48.         setTitle("發信測試");
  49.  
  50.         JPanel control = new JPanel(new GridBagLayout());
  51.         control.setMinimumSize(new Dimension(350, 100));
  52.  
  53.         control.add(new JLabel("主機ip"), new GridBagConstraints(1, 1, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  54.         control.add(txtIP = new JTextField("ms2.ccic.com.tw", 10), new GridBagConstraints(2, 1, 1, 1, 0.3, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  55.         control.add(new JLabel("通訊埠"), new GridBagConstraints(3, 1, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  56.         control.add(txtPort = new JTextField("25", 3), new GridBagConstraints(4, 1, 1, 1, 0.3, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  57.  
  58.         control.add(new JLabel("帳號"), new GridBagConstraints(1, 2, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  59.         control.add(txtAccount = new JTextField("gp_report", 10), new GridBagConstraints(2, 2, 1, 1, 0.3, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  60.         control.add(new JLabel("密碼"), new GridBagConstraints(3, 2, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  61.         control.add(txtPassword = new JPasswordField("29952666", 10), new GridBagConstraints(4, 2, 1, 1, 0.3, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  62.  
  63.         control.add(new JLabel("寄件人名稱"), new GridBagConstraints(1, 3, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  64.         control.add(txtSednerName = new JTextField("MES系統訊息", 10), new GridBagConstraints(2, 3, 1, 1, 0.3, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  65.         control.add(new JLabel("寄件人mail"), new GridBagConstraints(3, 3, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  66.         control.add(txtSenderMail = new JTextField("gp_report@ccic.com.tw", 10), new GridBagConstraints(4, 3, 1, 1, 0.3, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  67.  
  68.         control.add(new JLabel("收件人"), new GridBagConstraints(1, 4, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  69.         control.add(txtReceiverMail = new JTextField("", 10), new GridBagConstraints(2, 4, 3, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  70.  
  71.         control.add(new JLabel("html格式"), new GridBagConstraints(1, 5, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  72.         control.add(cbIsHtml = new JCheckBox(), new GridBagConstraints(2, 5, 3, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  73.  
  74.         control.add(new JLabel("主旨"), new GridBagConstraints(1, 6, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  75.         control.add(txtSubject = new JTextField("", 10), new GridBagConstraints(2, 6, 3, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 3, 3, 3), 1, 1));
  76.         control.add(new JScrollPane(txtBody = new JTextArea()), new GridBagConstraints(1, 7, 4, 1, 1, 1, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(3, 3, 3, 3), 1, 1));
  77.  
  78.         add(control, new GridBagConstraints(1, 1, 1, 2, 0, 1, GridBagConstraints.EAST, GridBagConstraints.VERTICAL, new Insets(3, 3, 3, 3), 1, 1));
  79.  
  80.         add(new JLabel("LOG"), new GridBagConstraints(2, 1, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  81.         add(btnSubmit = new JButton("發送"), new GridBagConstraints(3, 1, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(3, 3, 3, 3), 1, 1));
  82.         add(new JScrollPane(txtConsole = new JTextArea()), new GridBagConstraints(2, 2, 2, 1, 1, 1, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(3, 3, 3, 3), 1, 1));
  83.  
  84.         btnSubmit.addActionListener(btnSubmit_Click);
  85.  
  86.         // redirect console
  87.         System.setOut(new PrintStream(new OutputStream() {
  88.  
  89.             StringBuffer buffer = new StringBuffer();
  90.  
  91.             @Override
  92.             public void write(int b) throws IOException {
  93.                 switch (b) {
  94.                 case '\n':
  95.                     txtConsole.append(buffer.toString() + System.getProperty("line.separator"));
  96.                     buffer.delete(0, buffer.length() - 1);
  97.                     break;
  98.                 default:
  99.                     buffer.append((char) b);
  100.                     break;
  101.                 }
  102.             }
  103.         }));
  104.  
  105.         setSize(600, 400);
  106.         SwingWrench.setLocationCenter(this);
  107.     }
  108.  
  109.     private ActionListener btnSubmit_Click = new ActionListener() {
  110.         @Override
  111.         public void actionPerformed(ActionEvent e) {
  112.  
  113.             try {
  114.                 System.out.printf("==========Try sending mail at %s==========%n", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
  115.  
  116.                 PostCenter<PostCenter> pc = new PostCenter<PostCenter>();
  117.  
  118.                 pc.init(txtIP.getText().trim(), Integer.parseInt(txtPort.getText().trim()), true, txtAccount.getText().trim(), txtPassword.getText().trim());
  119.                 pc.setDebug(true);
  120.                 pc.setDebugOut(System.out);
  121.                 pc.setEncoding("UTF-8");
  122.  
  123.                 if (txtSednerName.getText().trim().length() == 0)
  124.                     pc.setSender(txtSenderMail.getText().trim());
  125.                 else
  126.                     pc.setSender(txtSenderMail.getText().trim(), txtSednerName.getText().trim());
  127.  
  128.                 String[] receivers = txtReceiverMail.getText().replaceAll("\\s", "").replaceAll(",", ";").split(";");
  129.  
  130.                 for (String s : receivers) {
  131.                     pc.addReceiver(s);
  132.                 }
  133.  
  134.                 pc.send(txtSubject.getText(), txtBody.getText(), cbIsHtml.isSelected());
  135.             } catch (Exception ex) {
  136.                 ex.printStackTrace(System.out);
  137.             }
  138.  
  139.             System.out.println();
  140.             System.out.println();
  141.             System.out.println();
  142.         }
  143.     };
  144.  
  145.     /**
  146.      * @param args
  147.      */
  148.     public static void main(String[] args) {
  149.         // TODO Auto-generated method stub
  150.         new PostMan().setVisible(true);
  151.     }
  152.  
  153. }
A good url validate regular expression
  1. ^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
GridView paging style design
  1. <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
  2.     ...... >
  3.     <Columns>
  4.         <asp:BoundField DataField="Name" HeaderText="姓名" SortExpression="Name" />
  5.         <asp:BoundField DataField="OrgID" HeaderText="單位編號" SortExpression="OrgID" />
  6.         .............
  7.     </Columns>
  8.     <PagerTemplate>
  9.         <div style="text-align:center;">
  10.             <asp:LinkButton ID="btnFirstPage" runat="server" CommandArgument="First" CommandName="Page" Text="First"
  11.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex > 0 %>' />
  12.             <asp:LinkButton ID="btnPrevPage" runat="server" CommandArgument="Prev" CommandName="Page" Text="Pre"
  13.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex > 0 %>' />
  14.                 
  15.             <asp:LinkButton ID="btnP4" runat="server"
  16.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex-3 > 0 %>'
  17.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex-3 %>'
  18.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex-3 %>' />
  19.             <asp:LinkButton ID="btnP3" runat="server"
  20.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex-2 > 0 %>'
  21.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex-2 %>'
  22.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex-2 %>' />
  23.             <asp:LinkButton ID="btnP2" runat="server"
  24.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex-1 > 0 %>'
  25.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex-1 %>'
  26.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex-1 %>' />
  27.             <asp:LinkButton ID="btnP1" runat="server"
  28.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex > 0 %>'
  29.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex %>'
  30.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex %>' />
  31.                 
  32.             <asp:LinkButton ID="btnCurrent" runat="server"
  33.                 Enabled="false"
  34.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex %>'
  35.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex+1 %>' />
  36.                 
  37.             <asp:LinkButton ID="btnN1" runat="server"
  38.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex+1 < (Container.NamingContainer as GridView).PageCount %>'
  39.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex+2 %>'
  40.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex+2 %>' />
  41.             <asp:LinkButton ID="btnN2" runat="server"
  42.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex+2 < (Container.NamingContainer as GridView).PageCount %>'
  43.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex+3 %>'
  44.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex+3 %>' />
  45.             <asp:LinkButton ID="btnN3" runat="server"
  46.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex+3 < (Container.NamingContainer as GridView).PageCount %>'
  47.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex+4 %>'
  48.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex+4 %>' />
  49.             <asp:LinkButton ID="btnN4" runat="server"
  50.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex+4 < (Container.NamingContainer as GridView).PageCount %>'
  51.                 CommandArgument='<%# (Container.NamingContainer as GridView).PageIndex+5 %>'
  52.                 CommandName="Page" Text='<%# (Container.NamingContainer as GridView).PageIndex+5 %>' />
  53.                 
  54.             <asp:LinkButton ID="btnNextPage" runat="server" CommandArgument="Next" CommandName="Page" Text="Next"
  55.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex+1 < (Container.NamingContainer as GridView).PageCount %>' />
  56.             <asp:LinkButton ID="btnLastPage" runat="server" CommandArgument="Last" CommandName="Page" Text="Last"
  57.                 Visible='<%# (Container.NamingContainer as GridView).PageIndex+1 < (Container.NamingContainer as GridView).PageCount %>' />
  58.                 
  59.             ,共<%# (Container.NamingContainer as GridView).PageCount %>頁,
  60.             到第<asp:TextBox ID="tbPageIndex" runat="server" Text='<%# (Container.NamingContainer as GridView).PageIndex+1 %>' Columns="3" />
  61.             <asp:LinkButton ID="btnGotoPage" runat="server" Text="Go" OnClick="GotoPage_Click"
  62.                 OnClientClick="__doPostBack($(this).attr('id').split('_').join('$'),$(this).parent().find('input:text').val());return false;" />
  63.         </div>
  64.     </PagerTemplate>
  65. </asp:GridView>
  1. protected void GotoPage_Click(object sender, EventArgs e)
  2. {
  3.     GridView gv = (sender as LinkButton).NamingContainer.NamingContainer as GridView;
  4.  
  5.     try
  6.     {
  7.         // __doPostBack 參數
  8.         int p = int.Parse(Request.Form["__EVENTARGUMENT"]);
  9.  
  10.         if (< 1 || p > gv.PageCount)
  11.         {
  12.             ClientScript.RegisterClientScriptBlock(
  13.                 GetType(),
  14.                 "f",
  15.                 "alert('錯誤頁碼!');",
  16.                 true
  17.             );
  18.         }
  19.         else
  20.         {
  21.             gv.PageIndex = p - 1;
  22.             gv.DataBind();
  23.         }
  24.     }
  25.     catch
  26.     {
  27.         ClientScript.RegisterClientScriptBlock(
  28.             GetType(),
  29.             "f",
  30.             "alert('錯誤頁碼!');",
  31.             true
  32.         );
  33.     }
  34. }
IDES 4.7 Installation
  1. 電腦名稱不能使用特殊名稱(bin/etc/var ...)
  2. 網路卡-> File and Printer Sharing for Microsoft Networks ->網路應用程式的資料輸送量最大化
  3. 安裝jdk1.4 (不升級)
  4. 設置JAVA_HOME
  5. 調高虛擬記憶體
  6. 安裝oracle
  7. 清空暫存資料夾 (%USERPROFILE%\Local Settings\Temp, %SystemRoot%\TEMP)
  8. 時間修改為2029年避免過期, 過晚的時間會發生無法安裝
  9. 載入export data時, 會檢查exportXX的data資料夾, 將exportXX以網路磁碟機的方式顯示在根目錄
Clipboard Usage
  1. import java.awt.Toolkit;
  2. import java.awt.datatransfer.Clipboard;
  3. import java.awt.datatransfer.ClipboardOwner;
  4. import java.awt.datatransfer.DataFlavor;
  5. import java.awt.datatransfer.StringSelection;
  6. import java.awt.datatransfer.Transferable;
  7. import java.awt.datatransfer.UnsupportedFlavorException;
  8. import java.io.IOException;
  9.  
  10. public class ClipboardUsage implements ClipboardOwner {
  11.  
  12.     public void setClipboardContents(String aString) {
  13.         StringSelection stringSelection = new StringSelection(aString);
  14.         Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  15.         clipboard.setContents(stringSelection, this);
  16.     }
  17.  
  18.     public String getClipboardContents() {
  19.         String result = "";
  20.         Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  21.         // odd: the Object param of getContents is not currently used
  22.         Transferable contents = clipboard.getContents(null);
  23.         boolean hasTransferableText = (contents != null) && contents.isDataFlavorSupported(DataFlavor.stringFlavor);
  24.         if (hasTransferableText) {
  25.             try {
  26.                 result = (String) contents.getTransferData(DataFlavor.stringFlavor);
  27.             } catch (UnsupportedFlavorException ex) {
  28.                 // highly unlikely since we are using a standard DataFlavor
  29.                 System.out.println(ex);
  30.                 ex.printStackTrace();
  31.             } catch (IOException ex) {
  32.                 System.out.println(ex);
  33.                 ex.printStackTrace();
  34.             }
  35.         }
  36.         return result;
  37.     }
  38.  
  39.     @Override
  40.     public void lostOwnership(Clipboard clipboard, Transferable contents) {
  41.  
  42.     }
  43.  
  44.     /**
  45.      * @param args
  46.      */
  47.     public static void main(String[] args) {
  48.         ClipboardUsage cu = new ClipboardUsage();
  49.         System.out.printf("Clipboard : %s%n", cu.getClipboardContents());
  50.         cu.setClipboardContents("clipboard test.");
  51.         System.out.printf("Clipboard : %s%n", cu.getClipboardContents());
  52.     }
  53.  
  54. }
Fill zero in front of number
SQL Server:
  1. select replicate('0', (10-len('123')))+'123'
Oracle:
  1. SELECT LPad('123',10,'0') FROM dual
DB2:
  1. values char(repeat('0',10-length('123'))||'123',10)
DataList paging
  1. //利用PageDataSource來做分頁功能
  2. PagedDataSource pds = new PagedDataSource();
  3. //將PageDataSource綁定SqlDataSource
  4. pds.DataSource = SqlDataSource1.Select(DataSourceSelectArguments.Empty);
  5. pds.AllowPaging = true;
  6. // 分頁大小
  7. pds.PageSize = 6;
  8.  
  9. int PageIndex;
  10. //分頁參數
  11. if (!string.IsNullOrEmpty(Request.QueryString["Page"]) && int.TryParse(Request.QueryString["Page"], out PageIndex))
  12. {
  13.     PageIndex = Convert.ToInt32(Request.QueryString["Page"]);
  14. }
  15. else
  16. {
  17.     PageIndex = 1;
  18. }
  19.  
  20. pds.CurrentPageIndex = PageIndex - 1;
  21.  
  22. // 最後一頁
  23. if (!pds.IsLastPage)
  24. {
  25.     hlNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(PageIndex + 1);
  26.     if (Request.QueryString["type"] != null) hlNext.NavigateUrl += "&type=" + Request.QueryString["type"];
  27. }
  28. else
  29. {
  30.     hlNext.Visible = false;
  31. }
  32.  
  33.  
  34. //將DataList綁定PageDataSource
  35. this.DataList1.DataSource = pds;
  36. this.DataList1.DataBind();
JTable : multi line cell
  1. table.getColumnModel().getColumn(i).setCellRenderer(new DefaultTableCellRenderer() {
  2.     @Override
  3.     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  4.         String v = (String) value;
  5.         String[] vs = v.split("\n");
  6.  
  7.         JPanel p = new JPanel(new GridLayout(vs.length, 1)) {
  8.             @Override
  9.             public void setForeground(Color fg) {
  10.                 for (int i = 0; i < getComponentCount(); i++) {
  11.                     getComponent(i).setForeground(fg);
  12.                 }
  13.                 super.setForeground(fg);
  14.             }
  15.  
  16.             @Override
  17.             public void setBackground(Color bg) {
  18.                 for (int i = 0; i < getComponentCount(); i++) {
  19.                     getComponent(i).setBackground(bg);
  20.                 }
  21.                 super.setBackground(bg);
  22.             }
  23.         };
  24.  
  25.         // 內容
  26.         for (String s : vs) {
  27.             JLabel l = new JLabel(s, JLabel.LEFT);
  28.             l.setOpaque(true);
  29.             p.add(l);
  30.         }
  31.         // 列高
  32.         table.setRowHeight(row, table.getRowHeight() * vs.length);
  33.  
  34.         // 顏色設定
  35.         p.setOpaque(true);
  36.         p.setBackground(Color.white);
  37.  
  38.         // 變更背景及字體 顏色同, 同時變更內部元件的顏色
  39.         if (isSelected) {
  40.             p.setBackground(UIManager.getColor("Table.selectionBackground"));
  41.             p.setForeground(UIManager.getColor("Table.selectionForeground"));
  42.         }
  43.  
  44.         if (hasFocus) {
  45.             p.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
  46.  
  47.             if (table.isCellEditable(row, column)) {
  48.                 p.setForeground(UIManager.getColor("Table.focusCellForeground"));
  49.                 p.setBackground(UIManager.getColor("Table.focusCellBackground"));
  50.             }
  51.         } else {
  52.             p.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
  53.         }
  54.  
  55.         return p;
  56.     }
  57. });
focus on validating
  1. function focusOnInvalidControl() {
  2.     for (var i = 0; i < Page_Validators.length; i++) {
  3.         if (!Page_Validators[i].isvalid) {
  4.             document.getElementById(Page_Validators[i].controltovalidate).focus();
  5.             return;
  6.         }
  7.     }
  8. }
Programmingly end cell edit mode of jtable
  1. // The following code saves the current value in the cell being edited
  2. // and stops the editing process:
  3. if (table.getCellEditor() != null) {
  4.     table.getCellEditor().stopCellEditing();
  5. }
  6. // The following code discards any changes made by the user and stops
  7. // the editing process:
  8. if (table.getCellEditor() != null) {
  9.     table.getCellEditor().cancelCellEditing();
  10. }
Test polymorphism in reflection method invoke
  1. package y11.m04;
  2.  
  3. import java.lang.reflect.Method;
  4.  
  5. public class d28t01 {
  6.  
  7.     /**
  8.      * @param args
  9.      * @throws Exception
  10.      */
  11.     public static void main(String[] args) throws Exception {
  12.         // Test polymorphism in reflection
  13.         Object invoker = new Invoker();
  14.         Class clazz = invoker.getClass();
  15.  
  16.         Dialer p1 = new Phone("12345");
  17.         Phone p2 = new Phone("234567");
  18.         CellPhone p3 = new CellPhone("345678");
  19.  
  20.         // cause java.lang.NosuchMethodException
  21.         try {
  22.             Method m1 = clazz.getDeclaredMethod("use", p1.getClass());
  23.             m1.invoke(invoker, p1);
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.         }
  27.         try {
  28.             Method m2 = clazz.getDeclaredMethod("use", p2.getClass());
  29.             m2.invoke(invoker, p1);
  30.         } catch (Exception e) {
  31.             e.printStackTrace();
  32.         }
  33.         try {
  34.             Method m3 = clazz.getDeclaredMethod("use", p3.getClass());
  35.             m3.invoke(invoker, p1);
  36.         } catch (Exception e) {
  37.             e.printStackTrace();
  38.         }
  39.  
  40.         Method[] ms = clazz.getDeclaredMethods();
  41.         for (Method m : ms) {
  42.             if (m.getName().equals("use")) {
  43.                 Class[] paramTypes = m.getParameterTypes();
  44.                 if (paramTypes.length == 1 && paramTypes[0].isAssignableFrom(p1.getClass())) {
  45.                     m.invoke(invoker, p1);
  46.                 }
  47.             }
  48.  
  49.             if (m.getName().equals("use")) {
  50.                 Class[] paramTypes = m.getParameterTypes();
  51.                 if (paramTypes.length == 1 && paramTypes[0].isAssignableFrom(p2.getClass())) {
  52.                     m.invoke(invoker, p2);
  53.                 }
  54.             }
  55.  
  56.             if (m.getName().equals("use")) {
  57.                 Class[] paramTypes = m.getParameterTypes();
  58.                 if (paramTypes.length == 1 && paramTypes[0].isAssignableFrom(p3.getClass())) {
  59.                     m.invoke(invoker, p3);
  60.                 }
  61.             }
  62.         }
  63.     }
  64. }
  65.  
  66. class Invoker {
  67.     public void use(Dialer dialer) {
  68.         if (dialer != null)
  69.             dialer.call();
  70.     }
  71. }
  72.  
  73. interface Dialer {
  74.     void call();
  75. }
  76.  
  77. class Phone implements Dialer {
  78.     public String number;
  79.  
  80.     public Phone(String number) {
  81.         this.number = number;
  82.     }
  83.  
  84.     public void call() {
  85.         System.out.printf("Call %s%n", number);
  86.     }
  87. }
  88.  
  89. class CellPhone extends Phone {
  90.  
  91.     public CellPhone(String number) {
  92.         super(number);
  93.     }
  94.  
  95.     @Override
  96.     public void call() {
  97.         System.out.printf("Dial %s%n", number);
  98.     }
  99. }