2015年11月29日 星期日

MS Chart Control 學習手記 - 圓餅圖

using System.Web.UI.DataVisualization.Charting;
using System.Drawing;

namespace Chart.AJAX
{
    public partial class Export_AJAX : System.Web.UI.Page
    {
        void CreateChart()
        {
            string[] xValues = { "0-20", "20-30", "30-40", "40-50", "50-60", "> 60", "unknow" };
            int[] yValues = {5, 18, 45, 17, 2, 1, 162 };

            //ChartAreas,Series,Legends 基本設定-------------------------------------------------
            Chart Chart1 = new Chart();
            Chart1.ChartAreas.Add("ChartArea1"); //圖表區域集合
            Chart1.Legends.Add("Legends1"); //圖例集合說明
            Chart1.Series.Add("Series1"); //數據序列集合

            //設定 Chart-------------------------------------------------------------------------
            Chart1.Width = 770;
            Chart1.Height = 400;
            Title title = new Title();
            title.Text = titleStr;
            title.Alignment = ContentAlignment.MiddleCenter;
            title.Font = new System.Drawing.Font("Trebuchet MS", 14F, FontStyle.Bold);
            Chart1.Titles.Add(title);

            //設定 ChartArea1--------------------------------------------------------------------
            Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = is3D;
            Chart1.ChartAreas[0].AxisX.Interval = 1;

            //設定 Legends-------------------------------------------------------------------------                
            //Chart1.Legends["Legends1"].DockedToChartArea = "ChartArea1"; //顯示在圖表內
            //Chart1.Legends["Legends1"].Docking = Docking.Bottom; //自訂顯示位置
            //背景色
            Chart1.Legends["Legends1"].BackColor = Color.FromArgb(235, 235, 235); 
            //斜線背景
            Chart1.Legends["Legends1"].BackHatchStyle = ChartHatchStyle.DarkDownwardDiagonal; 
            Chart1.Legends["Legends1"].BorderWidth = 1;
            Chart1.Legends["Legends1"].BorderColor = Color.FromArgb(200, 200, 200);

            //設定 Series1-----------------------------------------------------------------------
            Chart1.Series["Series1"].ChartType = SeriesChartType.Pie;
            //Chart1.Series["Series1"].ChartType = SeriesChartType.Doughnut;
            Chart1.Series["Series1"].Points.DataBindXY(xValues, yValues);
            Chart1.Series["Series1"].LegendText = "#VALX:    [ #PERCENT{P1} ]"; //X軸 + 百分比
            Chart1.Series["Series1"].Label = "#VALX\n#PERCENT{P1}"; //X軸 + 百分比
            //Chart1.Series["Series1"].LabelForeColor = Color.FromArgb(0, 90, 255); //字體顏色
            //字體設定
            Chart1.Series["Series1"].Font = new System.Drawing.Font("Trebuchet MS", 10, System.Drawing.FontStyle.Bold); 
            Chart1.Series["Series1"].Points.FindMaxByValue().LabelForeColor = Color.Red;
            //Chart1.Series["Series1"].Points.FindMaxByValue().Color = Color.Red;
            //Chart1.Series["Series1"].Points.FindMaxByValue()["Exploded"] = "true";
            Chart1.Series["Series1"].BorderColor = Color.FromArgb(255, 101, 101, 101);
            
            //Chart1.Series["Series1"]["DoughnutRadius"] = "80"; // ChartType為Doughnut時,Set Doughnut hole size
            //Chart1.Series["Series1"]["PieLabelStyle"] = "Inside"; //數值顯示在圓餅內
            Chart1.Series["Series1"]["PieLabelStyle"] = "Outside"; //數值顯示在圓餅外
            //Chart1.Series["Series1"]["PieLabelStyle"] = "Disabled"; //不顯示數值
            //設定圓餅效果,除 Default 外其他效果3D不適用
            Chart1.Series["Series1"]["PieDrawingStyle"] = "Default"; 
            //Chart1.Series["Series1"]["PieDrawingStyle"] = "SoftEdge";
            //Chart1.Series["Series1"]["PieDrawingStyle"] = "Concave";

            //Random rnd = new Random();  //亂數產生區塊顏色
            //foreach (DataPoint point in Chart1.Series["Series1"].Points)
            //{
            //    //pie 顏色
            //    point.Color = Color.FromArgb(150, rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)); 
            //}
            Page.Controls.Add(Chart1);  
        }
    }
}

畫出來的圓餅圖就像這樣

2015年11月14日 星期六

DataSet、DataTable 及 DataView (ADO.NET)

DataSet、DataTable 及 DataView (ADO.NET)

.NET Framework 4
ADO.NET DataSet 是以常駐記憶體表示的資料,不論內含資料來源為何,都可提供一致的關聯式程式設計模型。 DataSet 表示一組完整的資料,包括內含、排序和約束資料的資料表,以及資料表間的關聯性。
DataSet 的使用方式有幾種,可以獨立或組合套用。 您可以:
也可以使用 XML Web Service 傳輸強型別的 DataSet。 DataSet 的設計非常適合使用 XML Web Service 來傳輸資料。 如需 XML Web Service 的概觀,請參閱 XML Web Services Overview。 如需使用來自 XML Web Service 之 DataSet 的範例,請參閱 從 XML Web Service 使用 DataSet (ADO.NET)。

建立 DataSet (ADO.NET)
說明建立 DataSet 執行個體的語法。
將 DataTable 加入至 DataSet (ADO.NET)
說明如何建立資料表和資料行,並將它們加入 DataSet。
加入 DataRelation (ADO.NET)
說明如何在 DataSet 的資料表之間建立關聯性。
瀏覽 DataRelation (ADO.NET)
說明如何使用 DataSet 之資料表間的關聯性,傳回父子關係的子資料列或父資料列。
合併 DataSet 內容 (ADO.NET)
說明如何將一個 DataSet、DataTable 或 DataRow 陣列的內容合併到另一個 DataSet。
複製 DataSet 內容 (ADO.NET)
說明如何建立 DataSet 的複本,而此複本包含結構描述和指定的資料。
處理 DataSet 事件 (ADO.NET)
說明 DataSet 的事件和使用方式。
具型別資料集 (ADO.NET)
說明何謂具型別的 DataSet 以及它們的建立和使用方式。
DataTables (ADO.NET)
說明如何建立 DataTable、定義結構描述,以及管理資料。
DataTableReader (ADO.NET)
說明如何建立及使用 DataTableReader。
DataView (ADO.NET)
說明如何建立並使用 DataViews,以及使用 DataView 事件。
在 DataSet 中使用 XML (ADO.NET)
說明 DataSet 如何將 XML 當成資料來源進行互動,包括將 DataSet 的內容載入和保存為 XML 資料。
從 XML Web Service 使用 DataSet (ADO.NET)
說明如何建立可透過 DataSet 傳輸資料的 XML Web Service。

ADO.NET 的新功能
簡介 ADO.NET 的新功能。
ADO.NET 概觀
提供 ADO.NET 的設計和元件的簡介。
從 DataAdapter 填入 DataSet (ADO.NET)
明如何自資料來源載入具有資料的 DataSet。
以 DataAdapter 更新資料來源 (ADO.NET)
說明如何將 DataSet 中的資料變更解析回資料來源。
將現有的條件約束加入至 DataSet (ADO.NET)
說明如何將來自資料來源的主索引鍵資訊填入 DataSet。

其他資源

2015年11月11日 星期三

索引在陣列的界限之外

我寫一個計算機的M+ 
Dim f As Integer = 0 
Dim q(f) As Single 
f = f + 1 
q(f) = Me.TextBox1.Text 


案1次 M+ 就 +1次f 

然後再用q(f)這個陣列存放數字 
但是一出現 索引在陣列的界限之外。 
請解釋或幫我解決哪裡出問題

------------------------------------------------------------------------------


Dim f As Integer = 0 
Dim q(f) As Single 

這是 q.length = 1 , q 的 ubound 值為 0 
f = f + 1 
用 q(1) 當然會超出範圍, 

再來, 你的 q(f) 應該是要一直累計下去 
所以你的 f, q() 應該是在 function 外宣告成全域的 

超出範圍的解決方式, 
1. 在 f = f + 1 之後, 加入一行 redim preserve q(f) 
2. q() 陣列改用 list 來做會更方便, 連 f 都用不到了

2015年11月10日 星期二

程式概念隨手筆記

資料抽象化
-從物件中排除細節,抽取共適的屬性及運作
封裝(資訊隱藏)
-即資訊隱藏的概念,將外界無須知道的屬性跟運作隱藏起來,避免不必要錯誤或不合理的運作產生
降低ripple-effect漣波效應
提高使用者易用性
增加程式的可維護性
繼承
子類別可以繼承父類別的屬性及運作,同時也可加入子類別自訂的屬性及運作
多型
意指相同的訊息給予不同的物件會引發不同的動作稱之

就程式而言:
利用父類別型態
接收子類別物件
做相同的動作
引發不同的行為
同名異式

較有彈性但速度較慢





垃圾回收機制
垃圾回收器有兩個基本的原理:

  1. 考慮某個物件在未來的程式執行中,將不會被存取。
  2. 向這些物件要求歸回記憶體。



費氏數列程式
int fib(int i)
{
if (i==0) return 0;
if (i==1) return 1;
return fib(i-1)+fib(i-2);
}

遞迴
int sum(int n)
{
if (n==0) return 0;
return sum(n)+sum(n-1);
}

九九乘法
for(int i=1; i<=9;i++)
{
     for(int j=1; j<=9; j++)
     {
          System.out.print(i*J)
     }
}

BubSort(int A[], int n)  //氣泡排序法之副程式
  {
    int i, j , k,t=1, Temp,sp;
    for (i=n-1; i>0; i--)
       {
        sp=1;
       for (j =0; j <=i; j++)
          if (A[j] > A[j+1])
             {  //兩數交換位置
               Temp = A[j];
               A[j] = A[j+1];
               A[j+1] = Temp;
               sp=0;
             }
             if (sp==1) break;
       }

  }


2015年10月25日 星期日

XPath 範例

這個主題會檢閱整個 XPath 參考中出現的語法範例。 它們都是以 XPath 的 XML 檔範例語法 (inventory.xml) 為基礎。 如需在測試檔中使用 XPath 運算式的範例,請參閱這個主題結尾的<聯集範例 ( | )>。
運算式
代表意義
./author
目前內容中的所有 <author> 項目。 請注意,其等同於下一資料列的運算式。
author
目前內容中的所有 <author> 項目。
first. name
目前內容中的所有 <first.name> 項目。
/bookstore
這份文件的文件項目 (<bookstore>)。
//author
文件中的所有 <author> 項目。
book[/bookstore/@specialty=@style]
所有 <book> 項目,其 style 屬性值等於文件根上之 <bookstore> 項目的 specialty 屬性值。
author/first-name
當做 <author> 項目子系的所有 <first-name> 項目。
bookstore//title
位於 <bookstore> 項目一或多層深的所有 <title> 項目 (任意子代)。 請注意,其不同於下一資料列的運算式。
bookstore/*/title
當做 <bookstore> 項目子系的所有 <title> 項目。
bookstore//book/excerpt//emph
所有 <emph> 項目,其位於 <book> 項目的 <excerpt> 子系之任何位置,以及 <bookstore> 項目的任何位置。
.//title
位於目前內容中一或多層深的所有 <title> 項目。 請注意,唯有在此情況下,才需要使用句點標記法。
author/*
當做 <author> 項目子系的所有項目。
book/*/last-name
當做 <book> 項目子系的所有 <last-name> 項目。
*/*
目前內容的所有孫代項目。
*[@specialty]
含 specialty 屬性的所有項目。
@style
目前內容的 style 屬性。
price/@exchange
目前內容中所有 <price> 項目的 exchange 屬性。
price/@exchange/total
傳回空節點集,因為屬性不含項目子系。 XML 路徑語言 (XPath) 文法允許這個運算式,但其效果不大。
book[@style]
內含目前內容之 style 屬性的所有 <book> 項目。
book/@style
目前內容之所有 <book> 項目的 style 屬性。
@*
目前項目內容的所有屬性。
./first-name
目前內容節點中的所有 <first-name> 項目。 請注意,其等同於下一資料列的運算式。
first-name
目前內容節點中的所有 <first-name> 項目。
author[1]
目前內容節點中的第一個 <author> 項目。
author[first-name][3]
具有 <first-name> 子系的第三個 <author> 項目。
my:book
my 命名空間的 <book> 項目。
my:*
my 命名空間的所有項目。
@my:*
my 命名空間的所有屬性 (不含 my 命名空間項目上不合格的屬性)。
請注意,索引與父代是相對的。 請參考下列資料:
<x>
  <y/>
  <y/>
</x>
<x>
  <y/>
  <y/>
</x>
運算式
代表意義
x/y[1]
每一個 <x> 的第一個 <y> 子系。 其等同於下一列的運算式。
x/y[position() = 1]
每一個 <x> 的第一個 <y> 子系。
(x/y)[1]
來自 <x> 項目整組 <y> 子系的第一個 <y>。
x[1]/y[2]
第一個 <x> 的第二個 <y> 子系。
如需其他範例,請參考<XPath 的 XML 檔範例>。
運算式
代表意義
book[last()]
目前內容節點的最後一個 <book> 項目。
book/author[last()]
目前內容節點中每一個 <book> 項目的最後一個 <author> 子系。
(book/author)[last()]
最後一個 <author> 項目,其來自目前內容節點之 <book> 項目的整組 <author> 子系。
book[excerpt]
至少包含一個 <excerpt> 項目子系的所有 <book> 項目。
book[excerpt]/title
當做 <book> 項目子系,且至少包含一個 <excerpt> 項目子系的所有 <title> 項目。
book[excerpt]/author[degree]
至少包含一個 <degree> 項目子系,且當做至少包含一個 <excerpt> 項目之 <book> 項目子系的所有 <author> 項目。
book[author/degree]
包含 <author> 子系 (至少包含一個 <degree> 子系) 的所有 <book> 項目。
author[degree][award]
至少包含一個 <degree> 項目子系和至少一個 <award> 項目子系的所有 <author> 項目。
author[degree and award]
至少包含一個 <degree> 項目子系和至少一個 <award> 項目子系的所有 <author> 項目。
author[(degree or award) and publication]
至少包含一個 <degree> 或 <award> 和至少一個 <publication> 當做子系的所有 <author> 項目。
author[degree and not(publication)]
至少包含一個 <degree> 項目子系,且不包含 <publication> 項目子系的所有 <author> 項目。
author[not(degree or award) and publication]
至少包含一個 <publication> 項目子系,且不包含 <degree> 也不包含 <award> 項目子系的所有<author> 項目。
author[last-name = "Bob"]
至少包含一個 <last-name> 項目子系 (包含值 Bob) 的所有 <author> 項目。
author[last-name[1] = "Bob"]
其中第一個 <last-name> 子項目之值為 Bob 的所有 <author> 項目。 請注意,其等同於下一資料列的運算式。
author[last-name [position()=1]= "Bob"]
其中第一個 <last-name> 子項目之值為 Bob 的所有 <author> 項目。
degree[@from != "Harvard"]
其中 from 屬性不等於 "Harvard" 的所有 <degree> 項目。
author[. = "Matthew Bob"]
其值為 Matthew Bob 的所有 <author> 項目。
author[last-name = "Bob" and ../price &gt; 50]
內含 <last-name> 子項目 (其值為 Bob) 和 <price> 同層級項目 (其值大於 50) 的所有 <author> 項目。
book[position() &lt;= 3]
前三本書 (1、2、3)。
author[not(last-name = "Bob")]
不包含 <last-name> 子項目 (包含值 Bob) 的所有 <author> 項目。
author[first-name = "Bob"]
至少包含一個 <first-name> 子系 (包含值 Bob) 的所有 <author> 項目。
author[* = "Bob"]
所有包含值為 Bob 之任何子項目的所有 author 項目。
author[last-name = "Bob" and first-name = "Joe"]
內含 <last-name> 子項目 (含值 Bob) 和 <first-name> 子項目 (其值為 Joe) 的所有 <author> 項目。
price[@intl = "Canada"]
內容節點中 intl 屬性等於 "Canada" 的所有 <price> 項目。
degree[position() &lt; 3]
內容節點子系的前兩個 <degree> 項目。
p/text()[2]
內容節點中每個 <p> 項目的第二個文字節點。
ancestor::book[1]
內容節點中最接近的 <book> 上階。
ancestor::book[author][1]
內容節點的最接近 <book> 上階,且這個 <book> 項目將 <author> 項目當做子系。
ancestor::author[parent::book][1]
目前內容中最接近的 <author> 上階,並且這個 <author> 項目是 <book> 項目的子系。

為了展示聯集運算,我們使用下列 XPath 運算式:
x | y/x
在下列 XML 檔中,選取值為 green 或 blue 的所有 <x> 元素:

ms256086.collapse_all(zh-tw,VS.120).gifXML 檔 (data1.xml)

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="union.xsl"?>
<root>
   <x>green</x>
   <y>
      <x>blue</x>
      <x>blue</x>
   </y>
   <z>
      <x>red</x>
      <x>red</x>
   </z>
   <x>green</x>
</root>


ms256086.collapse_all(zh-tw,VS.120).gifXSLT 檔 (union.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="root">
   <xsl:for-each select="x | y/x">
      <xsl:value-of select="."/>,
      <xsl:if test="not(position()=last())">,</xsl:if>
   </xsl:for-each>
</xsl:template>

</xsl:stylesheet>


ms256086.collapse_all(zh-tw,VS.120).gif格式化輸出

green,blue,blue,green

ms256086.collapse_all(zh-tw,VS.120).gif處理器輸出

<?xml version="1.0" encoding="UTF-16"?>green,blue,blue,green