搜尋此網誌

2011年12月29日 星期四

log4net的應用


   'log4net.Layout.PatternLayout 中的轉換模式(ConversionPattern)
    '
    '%m(message): 輸出的日誌消息,如ILog.Debug(…) 輸出的一條消息
    '%n(new line): 換行
    '%d(datetime): 輸出當前語句運行的時刻
    '%r(run time): 輸出程序從運行到執行到當前語句時消耗的毫秒數
    '%t(thread id): 當前語句所在的線程ID
    '%p(priority): 日誌的當前優先級別,即DEBUG 、INFO 、WARN… 等
    '%c(class): 當前日誌對象的名稱,例如:
    '       模式字符串為:%-10c -%m%n
    '       代碼為:
    '       ILog log=LogManager.GetLogger(“Exam.Log”);
    '       log.Debug(“Hello”);
    '       則輸出為下面的形式:
    '        Exam.Log        - Hello
    '%L :輸出語句所在的行號
    '%F :輸出語句所在的文件名
    '%- 數字:表示該項的最小長度,如果不夠,則用空格填充
    '例如,轉換模式為%r [%t]%-5p %c - %m%n 的PatternLayout 將生成類似於以下內容的輸出:
    '176 [main] INFO   org.foo.Bar - Located nearest gas station.


    1.下載並將log4net.dll加入參考
    
    2.在Global中Application_Start裡加入
       log4net.Config.XmlConfigurator.ConfigureAndWatch(New 
      System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory & "log4net.config"))


   3.在根目錄增加log4net.config檔
  
   4.log4net.config中建立   
      <?xml version="1.0" encoding="utf-8" ?>
     <log4net>
     <!--設定監看等級必要一般而言會設DEBUG-->
     <!--訊息有五種等級由低而高為Debug、Info、Warn、Error、Fatal 設太低高的會無法使用-->
         <root>            
            <level value="DEBUG" />
            <appender-ref ref="RollingLogFileAppender" />
        </root>
     <!--自定義--> 
      <logger name="AAA.DBAccess" additivity="false">
            <level value="DEBUG" />
           <appender-ref ref="DBAccess_Info" />
      </logger>
    <!--DBAccess_Info自定義設定-->
     <appender name="DBAccess_Info" type="log4net.Appender.RollingFileAppender">
     <!--輸出檔案路徑-->
     <file value="Log/" />
     <appendToFile value="true" />
    <rollingStyle value="Date" />
    <!--關閉固定檔名-->
    <staticLogFileName value="false" />
    <!--檔名規則年月日+html-->
    <datePattern value="&quot;AAA_&quot;yyyyMMdd&quot;.html&quot;"  />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level - %logger - %L - [%property{NDC}] - %m %n" />
    </layout>
  </appender>




  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
     <!--輸出檔案路徑-->
    <file value="Log/" />    
    <appendToFile value="true" />
    <!--大小約束-->
    <rollingStyle value="Date" />
    
    <!--關閉固定檔名-->
    <staticLogFileName value="false" />
    <!--檔名規則年月日+html-->
    <datePattern value="yyyyMMdd&quot;.html&quot;"  />
    
    <layout type="log4net.Layout.PatternLayout">     
      <conversionPattern value="%date - %F - [%thread] - %-5level - %logger - %L -  %c - %m %n" />
    </layout>
  </appender>
    </log4net>

 5.程式中
    '預設的宣告
    Private Shared ReadOnly _log As log4net.ILog =     
    log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
   '自定義宣告 
   Private Shared ReadOnly _log2 As log4net.ILog = log4net.LogManager.GetLogger("AAA.DBAccess")
   'log產生
   _log2.Debug("TEST<br>")


   測試過的格式TXT,HTML,XML
   由於測試時的換行只有TXT能正常執行
   所以建議假如需要使用檔案格式
   TXT,HTML(需自行加<BR>但是可以使用網路直接觀看XML格式需另行編寫比較麻煩)






相關好文介紹
http://johoya.blogspot.com/2007/03/log4net.html
  

2011年12月27日 星期二

友善列印~


<script type="text/javascript">
  function previewScreen(block)
  {
        var value = block.innerHTML;
        var printPage = window.open("","printPage","");
        printPage.document.open();
        printPage.document.write("<OBJECT classid='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2' 
        height=0 id=wc name=wc width=0>友善列印</OBJECT>");
        printPage.document.write("<HTML><head></head><BODY onload='javascript:window.print();window.close();'>");
        printPage.document.write("<PRE>");
        printPage.document.write(value);
        printPage.document.write("</PRE>");
        printPage.document.close("</BODY></HTML>");
  }
</script> 






<a onkeypress="previewScreen(PrintDiv1)" onclick="previewScreen(PrintDiv1)" style="text-decoration:none" target="_blank"> 
   <img src="images/icon_13_1.gif"  width="90" height="49" alt="友善列印">
</a>




//需要列印的內容包在div中
<div id="PrintDiv1">
     <table>
           <tr><td class="TFont12" align ="left" >
           <asp:Literal id="Lite1" runat ="server" ></asp:Literal>
          </td>
           </tr>
     </table>
</div>

關於google search

由於最近案子開發有用到所以在此紀錄一下
程式方面

function google_serch()
{
   
    var wq=document.getElementsByName("q")[0].value;
    var link="http://www.google.com/search?sitesearch=網域.info&q="+wq;
    window.open(link); 
}


//輸入欄位

<input type="text" name="q"  size="26" 
style="border: 1px solid #FFFFFF; margin: 0px; padding: 0;  background-color:#FFFFFF"
 value="請輸入關鍵字"/>

//按鈕
<a onkeypress="google_serch()" onclick="google_serch()" 
style="text-decoration:none" target="_blank">
按鈕或文字或圖隨你~
</a>


程式方面這樣就OK了~但別以為這樣就結束了~~~
假如你是網站
那麼你需要先申請網域
然後到以下網址去註冊
https://www.google.com/webmasters/tools/submit-url?continue=http://www.google.com/addurl/?hl%3Dzh-TW%26continue%3D/addurl
這樣google才搜尋的到google serch是認網域的這時間應該不用一天
不過申請完後應該也只抓的到首頁而已
接下來請去申請webmaster tools
並加入你的網站
然後
診斷-->Googlebot 模擬器
我是選擇首頁(這裡建議最好選擇網站導覽類的作者是因為要建立的首頁都連的到)
然後提交GOOGLE建立索引
選擇第二個網址和所有連結的網頁
在來就是等了
雖然有人是說要等爬蟲~但是個人感覺有設應該會快一些~









2011年12月21日 星期三

C# 寄信語法(System.Net.Mail)


using System.Net.Mail;
public void  Send2(string szTo, string szSubject, string szBody, string szFrom, FileUpload Attachmentsurl)
 {
     //szTo 收件者 szSubject主旨  szBody內容 szFrom 寄件者 Attachmentsurl 附件 
      object[] mailtoadd = szTo.Split(',');
      for (int i = 0; i <= mailtoadd.Length - 1; i++)
      {
           MailAddress from = new MailAddress("寄件者", "收到後要顯示的名稱", System.Text.Encoding.UTF8);
           MailAddress to = new MailAddress(mailtoadd[i].ToString());
           MailMessage em = new MailMessage(from, to);
           em.SubjectEncoding = System.Text.Encoding.UTF8;
           em.BodyEncoding = Encoding.UTF8;
           //信件主題 
          em.Subject = szSubject;
          //內容 
          em.Body = szBody;
          if (Attachmentsurl.FileName != "")
          {
                    string path = @"" + 路徑 + Attachmentsurl.FileName.ToString();
                    Attachment data = new Attachment(path);
                    em.Attachments.Add(data);
          }
          em.IsBodyHtml = true;
          System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
          //登入帳號認證  
          client.Credentials = new System.Net.NetworkCredential("帳號", "密碼");
          // port 跟 host 是用gmail做例子其他非一樣
          client.Port = 587;
          client.Host = "smtp.gmail.com";
          //啟動SSL 
         client.EnableSsl = true;
          try
          {
               client.Send(em);


            }
            catch (Exception e)
           {
                  
            }
       }
  }

2011年12月13日 星期二

.NET Framework ASP.NET Padding Oracle

這個月由於要忙於系統上線的關係~
所以程式要進機房~當然基於開放的前提下要做資安掃描
結果就發生了 .NET Framework ASP.NET Padding Oracle 重大缺失
要解決這個重大缺失的方法可以參考
http://cert.shnet.edu.cn/anquangonggao/.net-framework-asp.net-padding
算是比較完整的當然對方應該也會給你一個錯誤報告上方應該也會有寫
主要也就是
.NET Framework 3.5 Service Pack 1之後版本

Web.config下
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx" />
然後新增一個一個存ASPX的網頁取名ErrorPage.aspx(名字自己訂就好跟上方呼應即可)
然後網頁內容
C#
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Threading" %>

<script runat="server">
        void Page_Load() {
        byte[] delay = new byte[1];
        RandomNumberGenerator prng = new RNGCryptoServiceProvider();

        prng.GetBytes(delay);
        Thread.Sleep((int)delay[0]);
       
        IDisposable disposable = prng as IDisposable;
        if (disposable != null) { disposable.Dispose(); }
    }
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div>
        An error occurred while processing your request.
    </div>
</body>
</html>

VB
<%@ Page Language="VB" AutoEventWireup="true" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Threading" %>

<script runat="server">
    Sub Page_Load()
        Dim delay As Byte() = New Byte(0) {}
        Dim prng As RandomNumberGenerator = New RNGCryptoServiceProvider()
       
        prng.GetBytes(delay)
        Thread.Sleep(CType(delay(0), Integer))
       
        Dim disposable As IDisposable = TryCast(prng, IDisposable)
        If Not disposable Is Nothing Then
            disposable.Dispose()
        End If
    End Sub
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div>
        An error occurred while processing your request.
    </div>
</body>
</html>

iis重啟
當然假如你以上都做完還是沒過的話
那就是window update的問題了
基本上我會建議先做完window update
會比較沒問題以上是我的慘痛經驗




2011年11月30日 星期三

在string中使用雙引號

在C#中 \"代表雙引號
    ex: AAA\"BB\"AAA  -->AAA"BB"AAA
在C#中\\ 表示反斜線
參考來源:http://www.allenkuo.com/GenericArticle/view.aspx?id=28

2011年11月28日 星期一

回上方按鈕

直接回上方語法
<a  href="#top" alt="TOP">
<img border="0" src="images/btn_top-2.gif" alt="回上方" width="94" height="36">
</a>

慢慢回上方語法(雖然後來是改用上方但還是記錄一下雖然原始網頁我忘了@@)
按鈕
<a href='javascript:scrollToTop.action();'>
script
<script type="text/javascript">
scrollToTop=new Object();
scrollToTop.scrollTop=null;
scrollToTop.scrollLeft=null;
scrollToTop.action=function(){
   if(scrollToTop.scrollTop==null)
{
var pageY = window.pageYOffset || (document.documentElement.scrollTop || document.body.scrollTop);
var pageX = window.pageXOffset || (document.documentElement.scrollLeft || document.body.scrollLeft);  
scrollToTop.scrollTop=pageY;
scrollToTop.scrollLeft=pageX;
}
scrollToTop.scrollTop=scrollToTop.scrollTop-20
scrollToTop.scrollLeft=scrollToTop.scrollLeft-20
if(scrollToTop.scrollTop<0){scrollToTop.scrollTop=0};
if(scrollToTop.scrollLeft<0){scrollToTop.scrollLeft=0};
window.scroll(scrollToTop.scrollLeft,scrollToTop.scrollTop); 
if(scrollToTop.scrollTop>0)
setTimeout("scrollToTop.action();",10)
return;
}
scrollToTop.scrollTop=null;
scrollToTop.scrollLeft=null;
  }
</script> 

2011年10月24日 星期一

facebook 推薦語法


由於最近網站越來越多使用facebook 推薦
所以在此紀錄
本篇文章參考下列網站
http://epromotor.pixnet.net/blog/post/30099287-%E6%89%93%E9%80%A0%E6%96%B9%E4%BE%BF%E5%88%86%E4%BA%AB%E7%9A%84%E7%B6%B2%E9%A0%81%EF%BC%88%E7%BA%8C%EF%BC%89


//備註:測試時請放在server測本機測試是無效的

// meta name=title 推薦時要秀的標題
// link rel='image_src' 推薦時要秀的圖案
// meta name="description" 推薦時要秀的文字



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml"
      xmlns:og="http://ogp.me/ns#"
      xmlns:fb="http://www.facebook.com/2008/fbml">

<head>
    <title>The Rock (1996)</title>
    <meta http-equiv="Content-Type" content="text/html; charset=big5"/>
    <meta name=title content="FACEBOOK-TEST">
    <meta name="description" content="this is facebook test " /> 
    <link rel='image_src' href="圖片路徑" />
    
</head>
<body> 
<form id="form1" runat="server">
 <tr>
   <td align="right">
      <table width="90" border="0" cellspacing="0" cellpadding="0">
      <tr>
           <td> 
               <img width='100' height='100' src='圖片路徑' />  
         </td>
         <td>
               <a href="javascript:void(window.open('http://www.facebook.com/share.php?
                     u='.concat(encodeURIComponent(location.href))))">
              <img src="按鈕圖示" width="27" height="37" title='[推到 Facebook]' />
              </a>
         </td>            
      </tr>
     </table>
    </td>
  </tr>
 </form> 
</body>
</html>

2011年10月20日 星期四

工具應用

virtualbox
********************************
格式轉換
轉載位址:http://hi.baidu.com/mozillazg/blog/item/91692c13596a14c2c2fd787a.html
dos模式下
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd  "檔案路徑\檔案名稱.vhd" "檔案路徑\檔案名稱.vdi"

硬碟擴充
轉載位址:http://rondoyoyo.pixnet.net/blog/post/31569230-%5Bmac%5D-%E5%A6%82%E4%BD%95%E5%B0%87%E8%99%9B%E6%93%AC%E6%A9%9F%E7%9A%84%E7%A1%AC%E7%A2%9F%E8%AE%8A%E5%A4%A7%EF%BC%88for-virtualbox%EF%BC%89


*********************************

2011年10月18日 星期二

在windows form 中匯出行事曆(.ics)檔

由於之前專案有要求在windows form中匯出行事曆以供outlook匯入使用
所以在此紀錄


格式說明:

1.      整個行事曆以BEGIN:VCALENDAR  ….. END:VCALENDAR包起來
2.      檔頭描述:PRODID:-//Taipei Calendar  … VERSION:2.0
3.      單一行程以BEGIN:VEVENT ……END:VEVENT包起來
4.      DTSTAMP:產生時間
5.      SUMMARY;LANGUAGE=zh-tw:行程名稱
6.      PRIORITY:行程重要性,高:1, 一般:5, :9
7.      DTSTART:時間開始
8.      DTEND:時間結束
9.      DTSTART;VALUE=DATE:整天
10.  DESCRIPTION行程說明



private void ToIcs(DataTable dgv)
{
            
    string TSQL = "BEGIN:VCALENDAR";
    TSQL += "\r\n";
    TSQL += "PRODID:-//Taipei Calendar";
    TSQL += "\r\n";
    TSQL += "VERSION:2.0";
    TSQL += "\r\n";
    for (int row = 0; row < dgv.Rows.Count; row++)
    {


        TSQL += "BEGIN:VEVENT";
        TSQL += "\r\n";
        TSQL += "DTSTAMP:" +
        DateTime.Now.ToString("yyyyMMdd") + "T" +   DateTime.Now.ToString("HHmmss");
        TSQL += "\r\n";
        //PRIORITY:行程重要性,高:1, 一般:5, 低:9
        TSQL += "PRIORITY:" + dgv.Rows[row]["IMPORTANCE"].ToString();
        TSQL += "\r\n";
        //T後面紀錄的是時分秒
        TSQL += "DTSTART:" + dgv.Rows[row]["START_DATE"].ToString() + "T000000";
        TSQL += "\r\n";
        TSQL += "DTEND:" + dgv.Rows[row]["END_DATE"].ToString() + "T230000";
        TSQL += "\r\n";
        TSQL += "SUMMARY;LANGUAGE=zh-tw:" + dgv.Rows[row]["TITLE"].ToString() ;
        TSQL += "\r\n";
        if (dgv.Rows[row]["IS_ALL_DAY"].ToString() == "Y")
        {
            TSQL += "DTSTART;VALUE=DATE::整天";
            TSQL += "\r\n ";
        }
        TSQL += "DESCRIPTION:" + dgv.Rows[row]["CONTENT"].ToString();
        TSQL += "\r\n";
        TSQL += "END:VEVENT";
        TSQL += "\r\n";
   }
   TSQL += "END:VCALENDAR";  
   SaveFileDialog saveFileDialog1 = new SaveFileDialog();
   saveFileDialog1.Filter = ".ics |";
   saveFileDialog1.Title = "匯出行事曆";
   saveFileDialog1.ShowDialog();
   if (saveFileDialog1.FileName != "") 
   {  
        System.IO.File.WriteAllText(
        saveFileDialog1.FileName.Replace(".ics","") + ".ics", TSQL.ToString());
   }
}

2011年10月12日 星期三

新增後取PK的方法

SQL
新增語法後;select @@identity as new然後用ExecuteScalar接他回傳的KEY值
SQLITE
新增語法後;select last_insert_rowid()然後用ExecuteScalar接他回傳的KEY值

2011年10月3日 星期一

.NET在Oracle存取單引號的問題

在程式中轉換Replace("'", "''") 2個點
顯示出來就會變為一個
假如要雙引號那麼就是Replace("'", "''''") 4個點

2011年9月29日 星期四

Windows From 行事曆

資料來源:
    http://www.codeproject.com/KB/selection/MonthCalendar.aspx

前置準備:
由於windowform中的元件Month Calendar是無法改變單一日期顏色所以請先
請到資料來源的網站中下載元件
"Download demo (.NET 2.0) - 67.4 Kb"

一.開啟一個新的專案
二.專案-->屬性
















                                                                                               

                                            

確認目標Framework得屬性為.NETFramework4
   不要選到Clint那個不然等下元件加進去建置完就會消失
    之前沒注意到搞了好久~吃了好大的虧阿
三.工具箱-->加入索引標籤(Pabo)-->
    右鍵-->選擇項目-->然後加入MonthCalendar.dll















                                                           
                                                                                 
四.將MonthCalendar托放至畫面
五.變更假日跟當日顏色
 private void monthCalendar1_DayQueryInfo(object sender, Pabo.Calendar.DayQueryInfoEventArgs e)
 {
      // 假日變更顏色
      if (e.Date.DayOfWeek == DayOfWeek.Saturday || e.Date.DayOfWeek == DayOfWeek.Sunday)
     {
         if (e.Date.Month == monthCalendar1.ActiveMonth.Month)
        {
           // Add custom formatting
          e.Info.BackColor1 = Color.Red;
          e.Info.BackColor2 = Color.GhostWhite;
          e.Info.ImageListIndex = 3;
          // Set ownerdraw = true to add custom formatting
          e.OwnerDraw = true;
        }
     }
     //當日變更顏色
     if (monthCalendar1.ActiveMonth.Month  == DateTime.Now.Month )
     {
                if (e.Date == DateTime.Now.Date)
                {
                    e.Info.BackColor1 = Color.SandyBrown;
                    e.Info.BackColor2 = Color.GhostWhite;
                    e.Info.ImageListIndex = 3;
                    // Set ownerdraw = true to add custom formatting
                    e.OwnerDraw = true;
                }
     }




 }
六.變更年月份年份時執行
private void monthCalendar1_MonthChanged(object sender, Pabo.Calendar.MonthChangedEventArgs e)
{




}
七 雙擊點選時執行

private void monthCalendar1_DayDoubleClick(object sender, Pabo.Calendar.DayClickEventArgs e)
{
            //e.Date 等於點選的日期
}

讓VS2010可以使用VS2008開啟的方法

轉貼自http://blog.csdn.net/wyzxk888/article/details/6331950

使用此的原由:
使用同事建立好的widow form專案時發現
目標Framework沒有低階得選項只有4.0可以選
導致無法資料跑時無法正常執行。。。。


.sln檔

前兩行:
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010

改為:
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008

.csproj檔

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0 " DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

改為:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5 " DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">


.csproj.user檔

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0 " xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

改為:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5 " xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

專案開啟後
請先建置
修改你的目標Framework
假如你原始專案中App.config中有建立supportedRuntime
可能也要更著修改(我是直接把App.config砍了@@)
以上是作者本身碰到的問題~這裡記錄一下~





2011年9月27日 星期二

關於window server 2008的工作排程器

作者我最近由於專案上的需求~
所以需要在server上建立一個排程
但不知是我的設定問題呢~還是他本來的設計就是如此
以下是在這次設定中發生的事項~在此次紀錄之~
1.建立排程請使用Administrator帳號登入
   (雖然後來我沒在使用其他帳號試過但安全起見還是用Administrator吧)
2.工作排程器上的執行~只是該排程開始啓用掛載上去得意思而已
   你不管按幾次他都不會實際去跑
   (這點跟之前版本有點不太一樣~之前我還呆呆試了好幾次想說怎都不動作)
3.使用.bat檔執行
   (作者需要跑的排程是一個.exe檔但不知為啥直接跑它OK但是排程跑都失效
     會使用bat也是最後無奈的作法~好在最後成功了
   )








安全性選項 使用者帳號
(注意:以最高權限執行~並非一定要勾選看個人專案需求
  ~因為作者有碰過勾了執行結果說成功結果反而不能跑的狀況 )

2011年9月9日 星期五

GridView 隔行換色


//ds 抓取的資料
if (ds.Tables[0].Rows.Count > 0)
  {
      int j = 0;
      int co = 0;
     //pagecount 每頁要秀的筆數
     int rowcount = pagecount * (Rsult_Grid.PageIndex + 1);
     if (rowcount > ds.Tables[0].Rows.Count)
     {
         co = ds.Tables[0].Rows.Count - (pagecount * e.NewPageIndex);
     }
     else
     {
         if (Rsult_Grid.PageIndex == 0 && ds.Tables[0].Rows.Count > pagecount)
        {
              co = pagecount;
        }
        else
       {
             co = ds.Tables[0].Rows.Count - rowcount;
       }
     }
     if (co > pagecount)
     {
          j = pagecount;
     }
     else
     {
         j = co;
      }
      for (int i = 0; i <= j - 1; i++)
      {
           // Rsult_Grid  GridView
           Rsult_Grid.Rows[i].BackColor = System.Drawing.Color.Gainsboro;
           i = i + 1;
      }
  }

2011年9月6日 星期二

DataTable轉EXCEL

通常我們在匯入excel後會在多產生一個錯誤報表給使用者更新
這邊提供的方法為
A網頁
.aspx

function erxls()
 {
        if(confirm("匯入完畢,是否匯出錯誤報表"))
       {
            window.open('B.aspx','錯誤資訊')
       }
      else
      {
   return false;
      }
 }



.cs檔
判斷產生的datatable有無資料
有資料後
將datatable存入Session
呼叫javascript function   erxls()


B網頁
DataTable errResult = (DataTable)Session["errResult"];

 if (errResult.Rows.Count > 0)
 {
                //呼叫APP_CODE中的CS檔
                XXXX ai = new XXXX();
                StringBuilder sb = ai.DtToExcel(errResult);
                //假如在A網頁中直接呼叫由於被清掉的緣故會導致畫面變成一片
                // 空白所以在這邊我們採用另開視窗的方式
                Response.ClearHeaders();
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.Buffer = true;
                Response.Expires = 0;
                Response.AddHeader("Content-Disposition", "attachment; filename=" + "error" + ".xls");
                Response.Write("<meta https-equiv=Content-Type content=text/html;charset=UTF-8>");
                Response.Charset = "UTF-8";
                Response.Write(sb);
                Response.End();
}


App_Code

public StringBuilder DtToExcel(DataTable dt)
{
         StringBuilder sb = new StringBuilder();
         if (dt.Rows.Count >0)
         {
             
             sb.Append("<html><body>");
             sb.Append("<table  cellspacing='0' cellpadding='0' width='50px'>");
             for ( int ii = 0 ; ii<= dt.Rows.Count - 1;ii++)
             {
                 sb.Append("<tr><td colspan='1' align='center'>欄位名稱:" + dt.Rows[ii]["XX"] + "</td> ");
                 sb.Append("<td colspan='1' align='center'>欄位名稱:" + dt.Rows[ii]["XXX"] + "</td>");
                 sb.Append("<td colspan='1' align='left'>欄位名稱:" + dt.Rows[ii]["XXX"] + "</td></tr> ");
             }
             sb.Append("</table>");
             sb.Append("</body></html>");
         }
         return sb;
}





2011年9月4日 星期日

Mono for Android初體驗(C# & Android)

以下文章參考網址
http://blog.xuite.net/keigen/SoftwareFactory/43443432
http://www.dotblogs.com.tw/joe80075/archive/2011/06/25/29930.aspx

安裝環境設置
安裝前請先確認VS2010有裝
假如全部裝完後才發現沒裝的話~第三步可是要重裝的~
以下連結是3個安裝檔的合併壓縮檔假如想偷懶一點的可從下方連結下載
https://docs.google.com/leaf?id=0B5I8M6D1VYZ4NzFjNzZjMTYtZWU4OS00MTA2LTlhYjctN2M5MjFkMjU1ZmQ1&hl=en_US
資料來源分別為
JDK
http://cn.forums.oracle.com/forums/thread.jspa?threadID=2270559
Windows SDK installer
http://developer.android.com/sdk/index.html
Mono for Android
http://mono-android.net/DownloadTrial



1.首先下載JDK(32bit)
   以下是oracle 下載網址
   http://www.oracle.com/technetwork/java/javase/downloads/index.html
   不過由於目前已無看到可下載的32bit的載點
   所以假如真的找不到可下載筆者的合併壓縮檔



2.安裝 Windows SDK installer
   下載網址為http://developer.android.com/sdk/index.html












2011年9月1日 星期四

C#開發android 相關文章

C#開發android
今天心血來潮時突然想到C#不知能不能開發android 系統
沒想到查查GOOGLE時意外發現好幾篇
上面寫的主要是使用Mono for Android 該套件
http://ffej1022.blogspot.com/2011/06/vistual-studio2010-c-android.html
http://www.dotblogs.com.tw/joe80075/archive/2011/06/25/29930.aspx
http://news.cnblogs.com/n/96608/
http://blog.xuite.net/keigen/SoftwareFactory/43443432

問題紀錄

紀錄運行中碰到的一些問題
PL/SQL developer 
Q:登錄時出現空白提示窗 登錄失敗
A:對捷徑點選內容-->相容性-->以系統管理員執行此程式
    此問題應為發生系統錯誤SP2-1503:无法初始化oracle调用界面
參考網址:http://honley.iteye.com/blog/1103651  

ASP.NET
Q: javascript 錯誤 WebForm_InitCallback()必須要有物件
A:此為伺服器上時間的問題日期調對即可
參考網址:http://hi.baidu.com/thinkibm/blog/item/b9efb500f5c01282e850cd6b.html

換行符號的轉換

\r=chr(13)=vbcr
\n=chr(10)=vblf
\r\n=vbcrlf


CSS
Q:position: absolute; top: 248px; left: 0px; width: 620px; height: 65px; z-index: -1
   在ie可以跑firefox google不能跑
A:firefox google 內z-index不能為負

2011年8月23日 星期二

常用的CSS語法(陸續補充)

當美工不給力時~是PG的悲哀~所以做些紀錄已備後查



  -------------------------------A1
  A3    B                                   A4
  -------------------------------A2

margin-top(table 使用)
A1與B的距離
ex: margin-top: 5px;

margin-bottom(table 使用)
A2與B的距離
ex: margin-bottom: 5px;


margin-left(table 使用)

A3與B的距離
ex: margin-bottom: 5px;


margin-right(table 使用)

A4與B的距離
ex: margin-bottom: 5px;

padding
2個tr間的距離(對應cellspacing)
ex:padding:2px; 


font-size
字體大小
ex:font-size:10pt;

font-family
字型
ex:font-family:微軟正黑體;


line-height 
文字行距

letter-spacing
文字間距

td強制換行
參考:http://www.cftea.com/c/2009/01/qpdzu40mnw8fyyg3.asp
style='word-break:break-all;'





2011年8月22日 星期一

常用的function(陸續補充)

NET
查當月天數
***********************************************************
DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.Month);
***********************************************************
查檔案存在否
***********************************************************
My.Computer.FileSystem.FileExists
***********************************************************
查資料夾
***********************************************************
Directory.Exists
***********************************************************

刪除
***********************************************************
File.Delete(路徑)
***********************************************************
複製

***********************************************************
 File.Copy(新的路徑+檔名,舊的路徑+檔名, True)
 True 表覆蓋
***********************************************************




HTML
location.href 跟 location.replace差異
***********************************************************
簡單說就是 location.replace換頁後(EX:A>B>C)
 B到C假如用 location.replace 那麼C的上一頁會回到A非B
參考網址:http://blog.miniasp.com/post/2009/03/25/location-href-and-location-replace-in-practice.aspx
註記: location.replace只能使用在前端後端直接呼叫會失效網頁還是會轉上一頁還是會跑進去

location.replace使用在後端的方法
(一)
前端網頁裡增加function

  function replaceUrl()
  {
       var len = history.length;
       history.go(-len);
       location.replace('AAA.aspx');
   }

後端
作完判斷後呼叫
Page.ClientScript.RegisterStartupScript(Page.GetType(), "alert", "replaceUrl();", true);
註記:該方法聽說只能用在IE
IE測試後是OK的但其他IE就沒試過
參考網址
http://blog.miniasp.com/post/2009/03/How-to-clear-browser-history-by-using-JavaScript.aspx
http://tw.myblog.yahoo.com/sbksheen.tw/article?mid=402&next=399&l=f&fid=17
(二)
ScriptManager.RegisterClientScriptBlock(Control, this.GetType(), "click", "location.replace('目標網頁')", true);
***********************************************************



JavaScript
限制輸入
***********************************************************
來源網址:http://www.cnblogs.com/prolifes/articles/1235566.html
onkeyup="this.value=this.value.replace(/[^a-z_-]/g,'')" //限制只能输入英文字母和_和- 
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" //只能输入中文 
onkeyup="if(isNaN(value)){alert('只能输入有效数字');execCommand('undo');}"//只能输入有效数字 onkeyup="if(!value.match(new RegExp('^[0-9]+$'))){alert('只能输入数字');this.value='';}"//只能输入整数

NET寫法:
TEXTBOX1.Attributes.Add("onkeyup", "this.value=this.value.replace(/[^a-z_-]/g,'')");   

正则表达式
"^\\d+$"  //非负整数(正整数 + 0) 
"^[0-9]*[1-9][0-9]*$"  //正整数 
"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0) 
"^-[0-9]*[1-9][0-9]*$"  //负整数 
"^-?\\d+$"    //整数 
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0) 
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数 
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0) 
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数 
"^(-?\\d+)(\\.\\d+)?$"  //浮点数 
"^[A-Za-z]+$"  //由26个英文字母组成的字符串 
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串 
"^[a-z]+$"  //由26个英文字母的小写组成的字符串 
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串 
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址 
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url

***********************************************************


轉貼關閉視窗不彈訊息
***********************************************************
window.opener=null;
window.open('','_self');
window.close();


資料來源:【topcat姍舞之間的極度凝聚】 http://www.dotblogs.com.tw/topcat/archive/2011/06/29/30443.aspx
***********************************************************


Mailto
***********************************************************

<a href="mailto:?subject=主旨&body=" onclick="this.href+=window.location.href" ></a>
***********************************************************


視窗關閉,假如選否轉換頁面選是視窗關閉
***********************************************************

<a href="javascript:document.body.style.display='none';
location.replace('http://tw.yahoo.com/');window.close();">
***********************************************************

Dos

 查port有無開啟
***********************************************************
 netstat -a
***********************************************************