2012年12月25日 星期二

軟體版本管理-TortoiseSVN-建立要管制的專案

1.到原廠網站下載安裝,若要使用中文,可另外下載中文包來安裝

2. 建立檔案庫,用來存放版本管理記錄:

3.建立要控管的專案目錄:未來將需要控管的程式主目錄放這邊

4.將程式專案放入控管區

5.操作範例:




6.更新,將異動記錄傳送到檔案庫:




2012年12月18日 星期二

GridView+Master Detail+Update


利用2個GridView做的Master Detail,每次選取GridView1的項目、顯示第2個GridView時會畫面閃爍,可利用AJAX的UpdatePanel元件達到不閃爍的目的,但使用UpdatePanel元件的缺點如下:

http://www.runpc.com.tw/content/content.aspx?id=104017

使用說明:
1.放入GridView1、SqlDataSource1,設定相關資料

2.放入ScriptManager物件

3.放入UpdatePanel,將GridView2放在UpdatePanel裡面、設定相關資料

4.UpdatePanel的Triggers屬性的ControlID加入GridView1、EvenName加入SelectedIndexChanged

2012年12月3日 星期一

用JavaScript中斷程式執行

需求:

若畫面上有一TextBox未填,使用者按下Button後,系統發出警告、不予處理。

方法一,用 RegularExpressionValidator物件
方法二, 用JavaScript,範例:
1.
<asp:button id="Button2" runat="server" onclick="Button2_Click" Text="PDF" OnClientClick="if(NoData()==false){return false;}"/>
2.
script type="text/javascript">

<function NoData() {
    alert("Please Fill The Data");
    return false;
}
</script>

2012年11月27日 星期二

Javascript Debug for IE

1.在Javascript裡面加入 debugger

function PanelVisible() {
    debugger;
    document.getElementById("div1").style.visibility = "visible";
}

2.IE 的 [工具] / [網際網路選項] –> [進階] 並取消勾選「停用指令碼除錯 (Internet Explorer)」

3.程式執行到debugger會停留在這邊,按F11作 Debug

2012年11月18日 星期日

GridView To PDF

嚴格的說,不是將GridView資料轉出到PDF,應該是說將網頁資料轉出到PDF,包含GridView,goole資料普遍都是利用免費的 iTextSharp Library達成目的,安裝方法不外乎就是下載dll檔,掛載到VS專案,程式表頭把相關參考加到Using。
使用過程遇到的案例參考:

1.這邊有詳細操作教學 http://danatang.blog.ntu.edu.tw/


2.中文問題,也可以參考 http://renjin.blogspot.tw/2009/01/using-chinese-fonts-in-itextsharp.html


2012年11月14日 星期三

Install AJAX Control Tool Kit at VS 2010 Express

1.At VS2010 -> Tool -> Extend Management 



2.Search NuGet Package Manager and Install.
   After install,restart VS2010

3.Open NuGet Package Manager 

4.Search AJAX and Install


Done

2012年11月5日 星期一

將文字轉出條碼

參考來源:
http://www.techrepublic.com/blog/howdoi/how-do-i-generate-barcodes-using-c/173

1.建立將文字轉條碼的類別

public static Bitmap CreateBarcode(string sData)
    {
        //create Bitmap物件
        Bitmap barcode = new Bitmap(1, 1);

        //設定條碼字型
        Font threeOfNine = new Font("Free 3 of 9", 60, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);

        //create圖形物件、載入Barcode字型
        Graphics graphics = Graphics.FromImage(barcode);

        //設定轉出條碼後的寬度、高度及字型
        SizeF datasize = graphics.MeasureString(sData, threeOfNine);

        //now we base the bitmap's size off of this data
        barcode = new Bitmap(barcode, datasize.ToSize());

        //依據更新後的bitmap刷新圖型物件
        graphics = Graphics.FromImage(barcode);

        //設定圖型物件背景顏色
        graphics.Clear(Color.White);

        //設定圖型物件的關聯文字的呈現模式為 SingleBitPerPixel
        //graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
       
        //將字串資料放入圖型物件
        graphics.DrawString(sData, threeOfNine, new SolidBrush(Color.Black), 0, 0);

        //圖型物件刷新
        graphics.Flush();

        //釋放物件
        threeOfNine.Dispose();
        graphics.Dispose();

        //回傳
        return barcode;
    }

2.畫面放一個Button、TextBox,Button事件裡面

        Bitmap barcode = HClass1.CreateBarcode("*" + TextBox1.Text + "*");
        barcode.Save(@"c:\barcode.gif", System.Drawing.Imaging.ImageFormat.Gif);

2012年10月16日 星期二

利用 ROW_NUMBER 函數產生序號欄位


需求:
找出2012年,每筆採購資料的第1次採購日期


說明:
採購單TABLE 為 PURTH
TH001 單別
TH002 單號
TH003 序號
TH004 品號
TH014 進貨日


範例:
SELECT *
FROM
(
select TH001,TH002,TH003,TH004,
ROW_NUMBER() OVER(PARTITION BY TH004 ORDER BY TH014) AS RN
FROM PURTH
WHERE
SUBSTRING(TH014,1,4) LIKE '2012'
) B

WHERE RN='1'

解析:
1.ROW_NUMBER() 裡面的 PARTITION BY TH004,表示以品號為切割區段,不同品號即重新排序
2.加上 ORDER BY TH014 ,表示以日期排序
3.綜合以上,即依進貨日、將相同品號排序、產生序號
4.包成另一TABLE以後,將裡面的序號 1(WHERE RN='1' ) SELECT出來

2012年9月23日 星期日

在TextBox按Enter時呼叫特定Button


在TextBox的KeyDown事件裡面判斷到Enter時呼叫Button

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Enter)
  {
    button1.Focus();
    button1_Click(sender,e);
  }
}

小時鐘






Paragraph




2012年9月8日 星期六

Cookie應用

功能說明:
1.畫面上放一個TextBox、CheckBox、Button
2.第一次登入時若勾選CheckBox且TextBox的值正確,將TextBox的值寫入Cookie
3.登入時檢查Cookie使否有值,若有、自動將Cookie值複製到TextBox,且將CheckBox打勾
4.登入時若將CheckBox勾選取消、會連同Cookie資料清除
5.按下Button後檢查Textbox是否正確,若正確、Button.Text="OKOK"
6.若TextBox值不正確、Cookie資料清除

程式範例:

 protected void Page_Load(object sender, EventArgs e)
 {
      if(!IsPostBack)
      {
           //取cookie資料
           if (Request.Cookies["txt1"] != null)
          {
              CheckBox1.Checked = true;
              TextBox2.Text = (Request.Cookies["txt1"].Value.ToString());
          }
       }
}

protected void Button1_Click(object sender, EventArgs e)
{
    //狀況1:若已勾記住帳號,重新寫入cookie
   if (CheckBox1.Checked)
   {
       if (TextBox2.Text == "aa")
       {
            Button1.Text = "OKOK!";

            //將正確資料寫入cookie
            HttpCookie cookie = new HttpCookie("txt1");
            cookie.Value = TextBox2.Text;
            cookie.Expires = DateTime.Now.AddYears(1);
            Response.Cookies.Add(cookie);
        }
    }
         
    //狀況2:取消勾選cookie且cookie若有資料須清空
    //因為不能直接刪除cookie,只要讓cookie過期變成失效,系統會自行刪除cookie
    if(!CheckBox1.Checked)
    {
        if (Request.Cookies["txt1"] != null)
        {
            HttpCookie cookie = new HttpCookie("txt1");
            cookie.Expires = DateTime.Now.AddDays(-1);
            Response.Cookies.Add(cookie);
        }
        if (TextBox2.Text == "aa")
            Button1.Text = "OKOK!";
    }
}

2012年8月24日 星期五

MasterPage 簡單練習 Part1

我想要設計一個這樣的網頁:

  1. 畫面切割為2塊,上下各一塊,上半部約占畫面5分之1高度,放公司Logo
  2. 首頁會有帳號、密碼欄位
  3. 若帳號密碼正確,登入後將網頁轉到另一資料畫面,上半部秀出登入者帳號
作法:
  1. create new MasterPage.
  2. delete the default ContenePlaceHolder.
  3. insert Table at one Column and on Row ,Writing something at Header.
  4. insert  ContenePlaceHolder.
  5. create new web page name Login.aspx  and locate to MasterPage .
  6. at Login.aspx insert a new  ContenePlaceHolder、TextBox、Button .
  7. create new Web Page name Welcome.aspx  and locate to MasterPage .
  8. at Welcome.aspx,write something for user login.
  9. You can at MasterPage header add two HyperLink,first one connect to  Login.aspx 」,second connect to Welcome.aspx 」 .

2012年8月19日 星期日

登入時的驗證碼

在google上面搜尋"asp.net 驗證碼",前面2頁,找到關於驗證碼的方法有很多種,有簡單的,有複雜的,還探討到所謂的OCR( 光學辨識技術)。
我想,大部分的人看到這名詞就會先跳過吧!很幸運的找到一篇文章值得推薦,原來在CodePlex竟然有驗證碼的控制項可直接下載來使用!
Msdn 裡面有教學文件 http://msdn.microsoft.com/zh-tw/ee854995.aspx, 裡面有提到要編輯web.config,在區段加入一些東西,嚴格的說,是放在 -> 裡面,可是我不知道這元件產生的驗證碼,能不能避開OCR....


2012年6月18日 星期一

建立一個可回傳字串陣列的Method


//=== 定義 ===
static string[] GetData(string sName)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=xx;Integrated Security=True");//HR
            conn.Open();
            string sDate = Convert.ToString(iDate); //日期
            string cmd = "select A,B FROM TABLE WHERE C = @para ";
         
            SqlCommand sqlcmd = new SqlCommand(cmd, conn);
            sqlcmd.Parameters.Add(new SqlParameter("@para", sName));

            SqlDataReader dr = sqlcmd.ExecuteReader();
            string[] ret = new string[2];
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    ret[0] = dr[0].ToString();
                    ret[1] = dr[1].ToString();
                 }
            }
            dr.Close();
            conn.Close();
            return ret;
        }

//=== 呼叫陣列 ===

string[] aGetList;
aGetList = GetData("Name");    //帶入帳號,for 回傳陣列資料

2012年4月6日 星期五

符合條件的結果集,將特定欄位的字串相加


以AdvantureWorks為DB,使用Person.Contact Table


-- 目的:取出LastName='Ferrier'的人,將其FirstName字串相加
--1.計算LastName='Ferrier'的筆數
--2.建立變數:NameCount(筆數)、n(取n筆資料的第一筆)、st(存放字串)
--3.跑回圈、累加字串

declare @NameCount int --取筆數
set @NameCount = (select count(*) from Person.Contact where LastName='Ferrier')
--select @NameCount
declare @n int --第n筆
set @n = 2

declare @st varchar(1000) --名字累加
set @st = (select top 1 FirstName from Person.Contact where LastName='Ferrier' order by FirstName)

while(@n <=@NameCount)
begin
set @st = @st + ';' + (select top 1 FirstName from
(select top(@n) FirstName from Person.Contact where LastName='Ferrier' order by FirstName asc)
tmp order by FirstName desc)
set @n =@n +1
end

select @st