2008-05-29

icon in front of URL

png, jpg, gif,後面加上 type="image/png"、type="image/jpg"、type="image/gif"
png語法:     <link rel="icon" href="圖片網址" type="image/png" />
jpg語法:      <link rel="icon" href="圖片網址" type="image/jpg" />
gif語法:        <link rel="icon" href="圖片網址" type="image/gif" />


icon檔:
<link rel="SHORTCUT ICON" href="圖片網址"/>
<link rel="icon" href="圖片網址" type="image/ico" />

2008-05-28

存取PreviousPage時發生ThreadAbortException

查了一堆資料都是從Thread was being aborted這個exception下手..
結果方向錯誤了~.~
ThreadAbortException, 根據微軟的資料, 當下了response.end指令時, thread會被強制中止, 此時就會擲出這個例外.
同時, 在response.redirect, server.transfer 時系統會自動下response.end的指令, 所以當response.redirect, server.transfer被放在try~catch區塊中時, 也會抓到這個例外
 
以上, 跟我遇到的情形有關連, 但是沒關係…=.=
我是在存取PreviousPage時出現這個問題..
後來發現, 原因是因為我的PreviousPage的form load裏有段程式如下
if IsNothing(Me.PreviousPage) then Response.redirect("~/Default.aspx")
 
推導出來的結論就是..
存取PreviousPage時, 系統其實暗地裏開了個新thread, new 一個previous page的instance
所以previous page的form load區段又被執行了..經過人為的判斷之後下了個response.redirect, 所以出現了ThreadAbortException的例外

2008-05-22

2008-05-07

更改datatype時遇到的問題

發生的environment :
1. Replication之下
2. 要將smalldatetime的欄位改成datetime
3. 有getdate()的default值
 
遇到的問題 :
1. 無法直接更改該欄位, 系統跳出訊息 "該欄位被某個constraint佔用"
2. 無法設defualt值
 
solution :
alter table Category drop DF_Category_CreationDate
alter table Category alter column CreationDate datetime not null
ALTER TABLE Category ADD CONSTRAINT DF_Category_CreationDate DEFAULT (getdate()) FOR CreationDate

2008-05-05

Scroll in MasterPage

在MasterPage裏用client script要取得document.body.scrollTop或document.body.scrollLeft時, 永遠都會傳回0
要用以下的方式取得
 
var ScrollTop = document.body.scrollTop;
   if (ScrollTop == 0){
    if (window.pageYOffset)
     ScrollTop = window.pageYOffset;
    else
     ScrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
   }

2008-05-01

使用OWC產生統計圖表

1.          建立一個SimpleChart.aspx
2.          加入Microsoft Office Web Components參考
3.          撰寫程式碼
SimpleChart.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SimpleChart.aspx.cs"Inherits="_Default" %>
<head runat="server">
    <title>未命名頁面</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Image ID="Image" runat="server" /></div>
    </form>
</body>
</html>

SimpleChart.aspx.cs
using System;
using Microsoft.Office.Interop.Owc11;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ChartSpace 圖表集合 = new ChartSpace();
        ChChart 圖表 = 圖表集合.Charts.Add(0);
       
        圖表.HasTitle = true;
        圖表.Title.Caption = "OWC測試";
   
        圖表.Axes[0].HasTitle = true;
        圖表.Axes[0].Title.Caption = "類";
        圖表.Axes[1].HasTitle = true;
        圖表.Axes[1].Title.Caption = "值";
    char Tab = Convert.ToChar(9);
        string 類 = "A" + Tab + "B" + Tab + "C" + Tab + "D";
        string 值 = "90" + Tab + "100" + Tab + "50" + Tab + "70";
        圖表.SeriesCollection.Add(0);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 類);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 值);
        圖表集合.ExportPicture(MapPath("Temp.jpg"), "Gif", 400, 400);
        this.Image.ImageUrl = "Temp.jpg";
    }
}
這樣就完成了,下圖是執行的結果
  現在來做程式碼的解說,SimpleChart.aspx的部分很簡單,所以就不多作說明,這一個範示只作SimpleChart.aspx.cs的說明,程式碼的變數都是用中文,相信對你在了解他是什麼用途應該會比較容易。
    
    ChartSpace圖表集合 = new ChartSpace();
        ChChart 圖表 = 圖表集合.Charts.Add(0)
ChartSpaceMicrosoft.Office.Interop.Owc11名稱空間下的類別,他是OWC最根部的類別之一,你可以想像他是一個畫版,可以畫很多個圖,ChChart代表畫版中的圖。
這是使用三個圖的畫版範例。
    圖表.HasTitle = true;
        圖表.Title.Caption = "OWC測試";
   
        圖表.Axes[0].HasTitle = true;
        圖表.Axes[0].Title.Caption = "類";
        圖表.Axes[1].HasTitle = true;
        圖表.Axes[1].Title.Caption = "值";
這個部分應該是很容易了解,HasTitle表示要不要顯示標題,Title.Caption表示標題的文字是什麼,也有Font字型等屬性可以調整,Axes代表圖表的軸,設定軸要不要顯示標題,每一個圖表的軸線都不盡相同,直條圖多半都是二個軸,也有二軸以上的圖表,也有零個軸如圖餅圖,這個地方是最容易發生程式的意外(Exception),在設計的時候別忘了檢查要圖表的類型是幾個軸的,或多或少都會產生意外喔。
    char Tab = Convert.ToChar(9);
        string 類 = "A" + Tab + "B" + Tab + "C" + Tab + "D";
        string 值 = "90" + Tab + "100" + Tab + "50" + Tab + "70";
        圖表.SeriesCollection.Add(0);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 類);
        圖表.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, 值);
Convert.ToChar(9)代表了Tab鍵的字元,VB.NET的話是使用Chr(9),數據是由Tab鍵分隔,SeriesCollection代表的圖表的數據集合,像線性圖是可以有好幾個數據,使用SetData方法設定數據,有三個參數,第一個是數據類型,第二個是數據來源的類型,第三個這邊的話就是數據啦,類型都有列在下方,可自行參考。
ChartDimensionsEnum 可為這些 ChartDimensionsEnum 常數之一。
chDimBubbleValues
設定「泡泡」圖上的標記值。
chDimCategories
設定要作為類別的值。
chDimCharts
會在 HasMultipleCharts 屬性設為 True時,設定新圖表的來源欄位。
chDimCloseValues
設定「股票」圖的收盤價。
chDimFilter
設定要放置在篩選軸上的欄位。
chDimFormatValues
設定要在格式圖中使用的值。
chDimHighValues
設定「股票」圖的最高價。
chDimLowValues
設定「股票」圖的最低價。
chDimOpenValues
設定「股票」圖的開盤價。
chDimRValues
設定「極座標」圖的 R 值。
chDimSeriesNames
設定要作為數列名稱的值。
chDimThetaValues
設定「極座標」圖的「樞紐角度」值。
chDimValues
設定製成圖表的值。
chDimXValues
設定 XY(散佈圖)或「泡泡」圖的 x 值。
chDimYValues
設定 XY(散佈圖)或「泡泡」圖的 y 值。
ChartSpecialDataSourcesEnum 可以是這些ChartSpecialDataSourcesEnum 常數之一。
chDataBound
將指定的物件連結到 DataReference 引數中所指定的外部資料來源。 
chDataLinked
將指定的物件連結到另一個維度。當您在Dimension 引數中指定 chDimFormatValues來建立格式圖時,請使用這個值。
chDataLiteral
將指定的物件連結到 DataReference 引數中所指定的文字資料。 
chDataNone
清除指定的物件。
        圖表集合.ExportPicture(MapPath("Temp.jpg"), "Gif", 400, 400);
        this.Image.ImageUrl = "Temp.jpg";
現在圖表都以經設定好了,可以輸出了,輸出有二個方式:
l          ExportPicture 輸出檔案
l          GetPicture 輸出成Byte陣列
這邊使用ExportPictureExportPicture有四個參數如下表:
FileName    
選擇性的 String。檔名和路徑。
FilterName    
選擇性的 String。指定要使用的圖形副檔名的名稱。支援的副檔名名稱為 GIFJPG  PNG。預設值為 GIF
Width     
選擇性的 Long 整數。指定圖形寬度(像素)。
Height     
選擇性的 Long 整數。指定圖形高度(像素)。
在將輸出的檔案路徑,給圖型控制項就大功告成了!!,不過到這邊只能算暸解OWC的一小部分而以,他還有很多功能,值得你去摸索,下列再列出一些OWC方法,讓你的圖表更豐富。
      //圖表是否顯示圖例
      圖表.HasLegend = False 
      //輸出的圖型類型,如下方列表
      圖表.Type = ChartChartTypeEnum.chChartTypeColumnClustered;
      //圖表是否要顯示數據值,請加在圖表.SeriesCollection[0].SetData之後
      圖表.SeriesCollection(0).DataLabelsCollection.Add()
      圖表.SeriesCollection(0).DataLabelsCollection.Item(0).HasValue = True //是不是要顯示Value
      圖表.SeriesCollection(0).DataLabelsCollection.Item(0).Font.Size = 10 //字體大小
      圖表.SeriesCollection(0).DataLabelsCollection.Item(0).NumberFormat ="#,##0" //數字格式,這裡是加上千分位