19
「Visual C# 2010 程式設計經典」二刷勘誤-2010/10 p.目錄-5 7.3 p.目錄-9 14.4.2 PageSetupDialog 設定列印格式對話方塊控制項 p.1-2 除此之外,也將針對分散式軟體開發技術,尤其是目前主流的 Web 服務技術, 加以深入的剖析,在完成整個 Internet 軟體開發技術的介紹之後,您將深刻了解到 如何透過 Visual Studio 2010 軟體開發工具,以及 Visual C# 2010 程式語言,建構出 .NET Framework 為堅實基礎的軟體元件與系統,再經由 Web 服務將軟體系統 延伸至 Internet,最後整合 Internet 上不同平台上的不同系統,以及各類型的用戶 端設備。因此您只要透過 Visual Studio 2010 Visual C# 2010 Express Edition 即可 快速開發 Windows Form 應用程式、WPF 應用程式、ASP .NET Web 應用程式、 Silverlight 應用程式、手機及智慧型裝置應用程式(Windows Phone)及雲端服務,以 便實現微軟「三螢一雲」(3 screens and cloud)的開發願景。下列簡單介紹 Visual Studio 2010 的新功能及特色。 p.1-4 3. Visual Studio 2010 內建 Silverlight 專案,透過 Silverlight 專案可讓開發人 員快速開發更具使用者經驗的 RIA(Rich Internet Application)Windows Phone 7 行動裝置應用程式。 p.1-5 7. 透過全新的 CSS(Cascading Style Sheet,串接樣式表)設計介面與網頁標準 支援來建立 Web 應用程式的使用者介面(ASP .NET 網頁,即 Web Form) p.1-6 1. 透過您熟悉的語言,如 Visual BasicC# C++ 可開發 Windows Form 用程式、WPF 應用程式、ASP .NET Web 應用程式、Silverlight 應用程式、 Web 服務、智慧型裝置應用程式(Windows Phone)Windows Embedded報表應用程式、SharePoint…等各類型應用程式專案。 2. 以視覺化的拖放設計工具來建立 Windows Form 應用程式、WPF 應用程 式、ASP .NET Web 應用程式、Silverlight 應用程式、智慧型裝置應用程式 (Windows Phone)、報表應用程式…等各類型應用程式專案。

「Visual C# 2010程式設計經典」二刷勘誤-2010/10「Visual C# 2010程式設計經典」二刷勘誤-2010/10 p.目錄-5 7.3 多型 p.目錄-9 14.4.2 PageSetupDialog設定列印格式對話方塊控制項

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

  • 「Visual C# 2010 程式設計經典」二刷勘誤-2010/10

    p.目錄-5

    7.3 多型

    p.目錄-9 14.4.2 PageSetupDialog 設定列印格式對話方塊控制項

    p.1-2

    除此之外,也將針對分散式軟體開發技術,尤其是目前主流的 Web 服務技術,加以深入的剖析,在完成整個 Internet 軟體開發技術的介紹之後,您將深刻了解到如何透過 Visual Studio 2010 軟體開發工具,以及 Visual C# 2010 程式語言,建構出以 .NET Framework 為堅實基礎的軟體元件與系統,再經由 Web 服務將軟體系統延伸至 Internet,最後整合 Internet 上不同平台上的不同系統,以及各類型的用戶端設備。因此您只要透過 Visual Studio 2010 或 Visual C# 2010 Express Edition 即可快速開發 Windows Form 應用程式、WPF 應用程式、ASP .NET Web 應用程式、Silverlight 應用程式、手機及智慧型裝置應用程式(Windows Phone)及雲端服務,以便實現微軟「三螢一雲」(3 screens and cloud)的開發願景。下列簡單介紹 Visual Studio 2010 的新功能及特色。

    p.1-4

    3. Visual Studio 2010 內建 Silverlight 專案,透過 Silverlight 專案可讓開發人員快速開發更具使用者經驗的 RIA(Rich Internet Application)及 Windows Phone 7 行動裝置應用程式。

    p.1-5

    7. 透過全新的 CSS(Cascading Style Sheet,串接樣式表)設計介面與網頁標準支援來建立 Web 應用程式的使用者介面(ASP .NET 網頁,即 Web Form)。

    p.1-6

    1. 透過您熟悉的語言,如 Visual Basic、C# 、C++ 可開發 Windows Form 應用程式、WPF 應用程式、ASP .NET Web 應用程式、Silverlight 應用程式、Web 服務、智慧型裝置應用程式(Windows Phone)、Windows Embedded、報表應用程式、SharePoint…等各類型應用程式專案。

    2. 以視覺化的拖放設計工具來建立 Windows Form 應用程式、WPF 應用程式、ASP .NET Web 應用程式、Silverlight 應用程式、智慧型裝置應用程式(Windows Phone)、報表應用程式…等各類型應用程式專案。

  • p.1-8 現今的程式設計師往往必須埋頭於數十萬行以上的程式碼中,彈精竭慮的維持軟

    體系統的可靠度與穩定性,然而傳統單純的結構化程式設計技術在今日卻早已無

    法掌握日益複雜的軟體系統,於是在程式設計方法的歷史演變中,物件導向 (OO, Object Oriented) 算是近代軟體系統分析、規劃與設計概念的一大突破,也無疑是大型軟體系統的救世主。

    p.1-24

    Silverlight 除了可開發 RIA(Rich Internet Application)應用程式,更可以開發 Windws Phone 7 裝置應用程式,例如手機、PDA、平板電腦 (Tablet PC),而且開發的方式與一般的 Web Form 幾乎沒有兩樣,因此只需要開發一份 Windows Phone 7 裝置應用程式,就可以應付規格多如牛毛的移動式設備。

    p.4-10

    Sort

    語法 1:Array.Sort(陣列名稱); 說明 1:對指定的一維陣列物件做遞增(由小到大)排序。 語法 2:Array.Sort(陣列名稱 1, 陣列名稱 2); 說明 2:依據第一個陣列的索引值來排序一對一維陣列。譬如:排序 score 陣列時,stu_name 陣列也會跟著更動。其寫法如下:

    Array.Sort(score, stu_name);

    p.6-19

    一. 靜態繫結

    同一類別的物件,在程式執行時必須能夠清楚辨別到底是存取哪個物件的屬

    性或執行哪個物件方法,否則程式執行時無法分辨出是哪個物件的屬性或方法。

    譬如:要命令一號車前進、二號車後退,就必須在下達命令時,能夠分辨出到底

    對哪個物件下達命令。譬如:下面兩個敘述分別使用 Car1 和 Car2 當一號車和二號車的物件名稱,Forward()和 Backward()為兩個物件的方法,哪個物件使用哪個方法,中間使用點號隔開就能清楚地識別,此時 C# 對不同 Car1 和 Car2 物件會分別配置不同記憶體空間來使用。

    指的是編譯器在程式編譯階段,就將物件與方法繫結在一起。例如:A.DoIt()直接編譯成機器碼直接呼叫 A 物件的 DoIt()方法。

  • p.6-22

    IBM.NoteBook 表示 IBM 命名空間裡面的那個 Notebook 類別,而 Apple. Notebook 就表示 Apple 命名空間裡面的那個 Notebook 類別了,這樣就可以避免宣告出 AppleNotebook 和 IBMNotebook 這種太長而且不具分類的類別名稱了,這又是另種抽象化概念的具體實現。這裡有一點要特別注意的,那就是 namespace{ … }敘述只能放在檔案層級,也就是說不可以放在方法(函式)或 class 宣告中,不過namespace 中還是可以有其它 "子命名空間"。譬如:延續上例 IBM 公司又細分成台灣 IBM 和日本 IBM,如此要區別這兩家分公司的 Notebook 類別名稱,就需要如下面敘述使用巢狀的 namespace 來定義 "子命名空間":

    p.6-23

    30 // 使用 IBM的 Taiwan 子命名空間下的 Notebook 類別建立 A 物件

    31 IBM.Taiwan.Notebook A = new IBM.Taiwan.Notebook();

    32 // 使用 IBM的 Japan 子命名空間下的 Notebook 類別建立 B 物件

    33 IBM.Japan.Notebook B = new IBM.Japan.Notebook();

    34 // 使用 Apple 命名空間下的 Notebook 類別建立 C 物件

    35 Apple.Notebook C = new Apple.Notebook();

    p.6-32

    07 // 定義 Move 方法,用來設定目前車子的 X, Y 座標位置

    08 public void Move(int vX, int vY)

    09 {

    10 _x = vX;

    11 _y = vY;

    12 }

    p.6-38

    1. 若類別中未定義建構式,會自動提供一個不做任何事的預設建構式(default constructor)。

    2. 建構式的名稱必須與類別名稱同名。 3. 建構式也可以多載,其做法和多載方法一樣,是使用不同的引數串列的個

    數和引數串列的資料型別來加以區隔建構式。 4. 建構式和解構式沒有傳回型別,即使是 void 也不需要。

  • p.7-3

    1. public public 成員的存取沒有限制,可以在類別中、子類別中或宣告的物件中使用 public 成

    員。是屬於公用層級。

    2. private private 成員只能在自身類別內做存取的動作。是屬於私用層級,外界無法使用。

    p.7-28

    C# 可以使用介面來解決上面的問題,介面和類別很像,類別可以定義屬性、方法和事件,但介面和類別不同的是,介面只宣告方法、屬性和事件成員,且介

    面所宣告的成員皆會自動成為 public 公用成員。介面最主要是用來宣告一組可操作的方法,它就代表一種方法的合約,當類別實作(Implements)某介面之後,該介面所宣告的方法要在類別重新實作過。例如 Car 本身擁有 SpeedUp 方法,現在想再加上 Fly 方法,首先可以使用 interface 關鍵字定義 IFly 介面,該介面內宣告 Fly方法,其寫法如下:

    p.7-42

    2 定義 Form1 類別繼承自 System.Windows.Forms.Form 類別,也就是說 Form1 類別擁有表單物件的所有屬性與方法。(第 8 行)

    p.7-44

    54 private void btnOk_Click(object sender, EventArgs e)

    55 {

    56 // 使用 System.Windows.Forms 命名空間下的 MessageBox.Show 方法顯示對話方塊

    57 MessageBox.Show(txtName.Text + " 您好");

    58 }

    p.7-45

    5. 若子類別希望可以覆寫父類別的屬性或方法,應使用哪個保留字來宣告子類別的屬性或方法。

    (1) Overrideable (2) override (3) virtual (4) 不用加上保留字

    8. 下列說明何者正確?

    (1) 建構式的名稱為 New

    (2) 若要建立一個靜態變數,可將該變數定義成 Shared 資料成員

    (3) 解構式的名稱為 Delete

    (4) 成員函式(方法)宣告為 public,表示該成員是公用成員(公用型)

  • p.7-46

    2. 延續上例,由使用者輸入鍵盤指定要產生多少位學生,然後由鍵盤輸入學生之學號、姓

    名、國文、英文、數學成績,最後詢問以姓名屬性要查詢哪位學生的資訊,若有該位學

    生則印出該位學生的資訊,否則印出 "找不到該位學生"。提示如下:

    p.8-22

    Refresh 方法 (繼承自 FileSystemInfo)

    重新整理 DirectoryInfo 物件實體所指的目錄。將 dir 指到的 myDir 目錄重新整理。

    p.9-7

    屬性名稱 屬性功能說明 預設值

    ContextMenuStrip 當使用者在此控制項按一下滑鼠右鍵時所顯示的快顯功能表。

    AllowDrop 是否可接受使用者拖曳資料到表單上。 False

    CausesValidation 表示此控制項是否引發驗證事件。 True

    DataBinding 取得控制項的資料繫結。 True

    Tag 和控制項關聯的使用者定義資料。

    Language 目前可使用的當地化語系。 (預設)

    Localizable 決定是否產生此物件的本土化代碼。 False

    DynamicProperties 將應用程式 Config.sys 組態檔中區段中的值對應到此元件的屬性。

    p.9-16

    LinkVisited 屬性 (預設值為 False)

    用來設定是否將超連結過 (已瀏覽過 )的文字變色,以和未超連結過的文字有所區隔。若設為 True 表示會變色,至於瀏覽過文字的顏色是由 VisitedLinkColor 屬性來設定。若設為 False,表示不變色。要注意,此屬性設為 True 時要配合 VisitedLinkColor 屬性一起使用。

    ActiveLinkColor 屬性 (預設值紅色)

    當使用者在超連結文字上按一下滑鼠左鍵未放開時所

    指定的顏色。

    p.9-27

    WordWrap 屬性 (預設值 True)

    當 MultiLine 屬性為 True 才有效。當 MultiLine= True 而且 WordWrap=True 時,若輸入的文字寬度超過控制項邊框會自動換行。譬如下例程式片段,執行時會將 textBox1控制項充滿整個表單,整個表單有如一個記事本: textBox1.Dock = DockStyle.Fill; textBox1.MultiLine = true ; textBox1.WordWrap = true ;

  • p.9-32

    2 Suggest 將篩選字串的結果置入下拉式清單供您選取。如下圖:

    p.9-37

    MessageBox 類別所提供的 Show 方法讓您可產生一個包含訊息、按鈕、特殊符號的對話方塊,用來告知和提示使用者。其語法如下:

    語法 傳回值 = MessageBox.Show([Object], Message, Caption, MessageButtons,

    MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions)

    p.10-3

    Image 屬性 (預設值無)

    在 表 單 上 目 前 被 選 取 的 選 項 按 鈕 控 制 項 以 指 定 的 圖

    像顯示。欲在程式執行時,將 C 磁碟機 cs 資料夾的show.bmp 圖片載入到此選項按鈕上顯示,其寫法如下: radioButton1.Image = Image.FromFile("c:\\cs\\show.bmp") ;

    Checked 屬性 (預設值 False)

    當程式執行時,在該選項鈕按一下,會將此控制項的

    Checked 屬性設為 True,同時將同一群組的其它選項按鈕都設成 False。在程式中,對 radioButton1 選項按鈕控制項判斷是否有被選取,其寫法如下: if (radioButton1.Checked==true) { //程式敘述 }

    p.10-4

    成員名稱 說明

    ThreeState 屬性 (預設值 False)

    用來設定該核取方塊是否支援雙態或三態。所謂雙態是

    指勾選或不勾選;三態是指勾選、不勾選、不定狀態。

    若將此屬性設為 True,表示核取方塊有三種狀態,當該控制項被勾選或設為不定狀態時,會將 True 傳給 Checked屬性;未勾選時,會傳 False 給 Checked 屬性。程式中將此屬性設為 False 的寫法如下: checkBox1.ThreeState=false;

    Click 事件 當你在此核取方塊上按一下會觸動此事件。

    p.10-20 27 txtShow.ReadOnly = true;

    28 txtShow.Multiline = true;

    29 rdbF.Checked = true; // 女選項鈕,預設選取

  • p.10-26

    Update()方法 更新清單方塊的內容。其寫法如下:

    comboBox1.Update();

    SelctedIndexChanged 事件

    當 下 拉 式 清 單 中 被 選 取 的 選 項 有 改 變 時 會 觸 動 此 事

    件。下拉式清單在程式執行時,提供使用者選取選項,

    而 當 使 用 者 選 取 了 其 中 一 個 選 項 時 , 就 會 觸 發

    SelectedIndex Changed 事件。因此,可將選取選項後想 讓 系 統 做 出 哪 種 反 應 的 程 式 敘 述 寫 在

    SelectedIndexChanged 事件處理函式中。

    p.10-31 91 m[n].Name = cboName.Text;

    92 m[n].BirthdDay = myBirthDay ;

    93 m[n].Sex = rdbM.Checked ? "男" : "女";

    94 m[n].Job = lstJob.SelectedItem.ToString();

    p.10-40

    2. CheckedListBox 繼承自下例哪個控制項?

    (1) RadioButton (2) TextBox (3) CheckBox (4) ListBox

    p.10-42

    4. 建立下圖租 DVD 的程式。表單的 DVD 清單為出租店可出租的 DVD,右邊清單為會員

    出所租的 DVD 清單。當會員先選取左邊「DVD 清單」內的片名並按 鈕,可將

    所選的 DVD 放入右邊的「出租清單」內;若會員選取右邊「出租清單」中的某片 DVD

    並按 鈕,可將所租的 DVD 放回左邊的店家「DVD 清單」內。

    p.11-4

    2. 將 C 磁碟 Windows 資料夾下的 Waves.bmp 圖片載入到 pictureBox1 控制項內:

    pictureBox1.Image = Image.FromFile("C:\\Windows\\Waves.bmp");

    製作一個秀圖程式。表單載入時將 "企鵝", "沙漠", "無尾熊", "菊花", "鬱金香" 選項文字放入下拉式清單內,當使用者選取下拉式清單某一選項時,圖片方

    塊即顯示對應的圖。例如在下拉式清單選取 "沙漠",此時圖片方塊顯會顯示 "沙漠.jpg" 圖檔,其它以此類推,執行結果如下兩圖。

    p.11-8

    4. 此時,表單中的 Label、Button、RadioButton、CheckBox、TabControl、ToolBar…等控制項,便可由自己的 ImageList 屬性的下拉鈕清單中選取已建好的imageList1 影像清單控制項……

  • p.11-12 27 //將"企鵝.jpg", "沙漠.jpg", "無尾熊.jpg", "菊花.jpg", "鬱金香.jpg"

    28 // 五張圖放入 imageList1 影像清單控制項內

    p.11-14

    數字上下按鈕控制項允許在表單上建立一個如下圖可以按

    上下鈕便可設定數值的控制項,而且可設定是否允許在編輯區鍵入數值以及設

    定每按鈕一次的增減值。…..

    p.11-16

    Items.Add 方法

    使用此方法是將項目加入清單的最後面。欲在程式中當

    ReadOnly=False 時允許在該控制項輸入字串,將輸入的字串加入到清單的最後面。其寫法如下: domainUpDown1.Items.Add(domainUpDown1.Text); 欲在程式中,將 textBox1 的內容放到此清單控制項的最後面,其寫法如下: domainUpDown.Items.Add(textBox1.Text);

    p.11-18 16 numericUpDown1.Minimum = 1; // 數字上下鈕最小值為 1

    17 numericUpDown1.Maximum = 10; // 數字上下鈕最大值為 10

    p.11-23

    Orientation 屬性 (預設值 Horizontal )

    設定 TrackBar 是以水平(Horizontal)或垂直(Vertical)顯示。

    p.11-28 09 // left 為 true表示跑馬燈往左,left 為 false 表示跑馬燈往右

    10 bool left = true;

    p.11-44

    2 按下 鈕之後吃角子老虎開始轉動,此時三個圖片方塊即會以亂數的方式顯示 1.jpg~4.jpg 圖檔。

    p.12-2

    DetectUrls 屬性

    如果 RichTextBox 控制項內的文字含有和網站相連的文 字 超連 結時 , 可使 用此 屬 性在 控制 項 的文 字 中

    適當的顯示連結。此時便可使用 LinkClicked 事件來執行和連結相關聯的工作。

  • p.12-6 DropDownButton

    下拉按鈕工具圖示

    產生按鈕的下拉選項,用來指定所連接的 ToolStrip

    MenuItem 功能表項目控制項。

    p.12-10

    將 toolStrip1 中 按鈕的 Text 屬性設為 "存檔",讓該按鈕以 顯示。

    p.12-30

    一. MenuStrip 功能表內功能項目常用成員

    ShowShortcutKey 屬性

    (預設值 True) 設定是否顯示快速鍵。

    ShortcutKey 屬性

    用來設定功能表項目右邊的快速鍵。快速鍵由 、

    、 鍵配合清單中指定的按鍵組合而成。

    譬如:[檔案/開檔] 是按 + 鍵相當於用滑鼠

    點選 [檔案/開檔] 功能選項一樣,此快捷鍵有效必須

    先將

    p.12-31

    ShortcutKey 屬性

    ShortCut 屬性設為 True。其設定方式如下:

    若欲取消快速鍵設定按 鈕。

    DisplayStyle 屬性

    (預設值為 ImageAndText)

    有 ToolStripMenuItem 選項圖示才有提供此屬性,用來

    設定功能選項上面可顯示:無(None)、Text(限文字)、

    Image(限圖片)、文字與圖片(ImageAndText)。

    二. MenuStrip 功能表控制項的建立

  • p.12-32 在 [檔案] 功能選項按一下,接著在下方出現的 上按一下,出現插入點游標,分別鍵入『新增(&N)』、『開檔(&O)』 兩子選項,「&」符號可將下一個字元加上底線。

    p.12-44

    3. 功能表實作。此功能表包括字型、顏色、大小等功能。其中使用 ToolStripMenuItem 選

    項製作字型功能表,包括: "新細明體"、"標楷體" 子選項;同樣使用 ToolStripMenuItem

    選項製作顏色功能表含有前景和背景子選項……

    p.13-10

    3. 若放開方向鍵,則圖片立即返回起始位置。

    3. 若所按的鍵不是 、 、 、 鍵時,只要該按鍵具有掃描碼,會

    在左下角顯示該按鍵的鍵值。

    p.13-18

    4. 在畫布上兩點座標(50,50)、(100,100) 繪製一條畫筆寬度為 1 Pixels 的紅色線段:

    int point = 1; // 畫筆寬度 Pen p1 = new Pen(Color.Red, point); // 建立寬度為 1 pixel 的紅色畫筆 g.DrawLine(p1, 50, 50, 100, 100); // 在畫布上畫一條直線 pictureBox1.Image = bmp ;

    5. 清畫布變成黃色畫布:

    g.Clear(Color.Yellow); pictureBox1.Refresh();

    p.13-19 換圖

  • p.13-21 61 // 在 pictureBox1 圖片方塊上按滑鼠鍵

    62 private void pictureBox1_MouseDown

    (object sender, MouseEventArgs e)

    63 {

    64 oldX = e.X;

    65 oldY = e.Y;

    66 }

    67 // 在 pictureBox1 圖片方塊移動滑鼠會執行

    p.13-31

    2. pid 產品編號、pname 品名及 price 單價的陣列有 5 個元素,你可由文字方塊中輸入產品

    編號進行產品查詢,文字方塊最多只能輸入 4 個字元,且第一個字必須輸入英文字、第

    二個到第四個只能輸入數字。

    p.14-5

    ShowDialog 方法

    將指定的 ColorDialog 控制項打開。譬如:先將 textBox1 控制

    項的前景色傳給 colorDialog1 色彩對話方塊當預設開啟色彩

    對話方塊的顏色後,接著再開啟 colorDialog1 色彩對話方塊…

    p.14-13

    Step 01 延續上列,請開啟書附光碟 ch14 資料夾下的「FontColorDialogDemo.sln」方案檔。

    p.14-16

    14.4.2 PageSetupDialg 設定列印格式對話方塊控制項 當一份文件在列印之前,可以透過 設定列印格式對話方

    塊控制項,來設定列印、邊界、紙張方向、大小和來源,並且設定是否顯示說………..

    p.14-17

    由於 PageSetupDialog 需要顯示頁面設定,必須先在編輯程式階段透過屬性視窗將 Document 屬性指到欲使用的 PrintDocument 控制項,或是在執行階段使用下面敘述來指定,接著再使用 ShowDialog() 方法開啟 PageSetupDialog 設定列印格式對話方塊:

    pageSetupDialog1.Document = printDocument1 ; printDocument1. DefaultPageSettings = pageSetupDialog1. PageSettings ;

    下圖即是使用 ShowDialog()方法所開啟的列印版面設定列印格式對話方塊:

  • 下表是 PageSetupDialog 對話方塊控制項常用成員的功能說明:

    成員名稱 說明

    PageSettings 屬性

    執行階段的屬性值,取得或設定當使用者按一下對話方

    塊中的 按鈕時,要修改的印表機設定。例如:

    將 pageSetupDialog1 設定列印格式版面控制項的相關屬

    性設定值指定給 printDocument1 控制項的

    DefaultPageSetting 屬性,其寫法如下:

    p.14-18

    ShowHelp 屬性 設定列印格式版面對話方塊是否出現 鈕。預

    設值為 False,表示不顯示。

    ShowNetwork 屬性

    當屬性值為 True 時,在出現的設定列印格式版面對話方

    塊中按 鈕時,出現設定列印格式對話方塊中會

    出現 鈕。預設值為 False,表示不顯示。

    p.14-24

    2. 第 19-25 行:按 鈕時執行 btnSetup_Click 事件處理函式,此時開啟

    printDocument1 版 面 設 定 列 印 格 式 對 話 方 塊 , 透 過 第 23 行 , 將 存 放 在pageSetupDialog1控制項的PageSettings 屬性值指定給printDocument1列印文件控制項的 DefaultPageSettings 屬性。

    p.15-16

    Step 04 如下圖操作,將「部門」資料表的部門編號與「員工」資料表的部門編號進行關聯,是屬於一對多的關聯。

    p.15-57

    Step 02 將 BindingSource 放到表單內,並使用 bindingSource1 控制項連接 MyDB.mdf 資料庫,再擷取「部門」及「員工」兩個資料表的所有記錄並填入 MyDBDataSet 物件。因為操作步驟大同小異為節省篇幅,因此不再贅述,請自行參考前面章節。

    p.15-60

    4. 接著員工 DataTable 與部門 DataTable 的部門編號欄位會進行關聯。

  • p.15-64 1. 製作兩個關聯資料表的資料庫應用程式。將書附光碟 [資料庫] 下的 Northwind.mdf 資

    料庫的「產品類別」及「產品資料」兩個資料表的「類別編號」欄位進行關聯,當在上

    方的 DataGridView 中選取產品類別的某一筆記錄,下方的 DataGridVeiw 即會顯示對應

    的產品資料所有記錄。

    p.16-6

    若 uid 與 pwd 都不加,可以改用「Integrated Security=True 參數」,則表示使用目前登入系統的 Windows 帳號來連接 SQL Server。如果在ASP .NET 網頁(Web Form)中,根據不同版本的 IIS 所使用的帳號會不一樣。譬如:IIS 5(Windows XP)是使用「ASPNET」帳號;IIS 6(Windows Server 2003)及 IIS 7(Windows Server 2008)是使用「NETWORK SERVICE」帳號。

    Visual Studio 2010 及 Visual C# 2010 Express Edition 內建可以建立 SQL Server Express 資料庫檔案,因此本書範例皆以連接 SQL Server Express 資料庫檔案為主,以方便初學者學習,其用法只有連接字串的設定不同而己。下面寫法示範如何連

    接至 SQL Server Express 的「Northwind.mdf」資料庫檔案。

    p.16-14

    :ConnectionDemo3.sln 在 ConnectionDemo3 專案的應用程式組態檔 app.config 建立 connString 字串,此字串是用來連接目前專案 Northwind.mdf 資料庫的連接字串,ConnectionDemo3 專案有 Form1 與 Form2 表單皆可使用 connString 來連接Northwind.mdf 資料庫。執行 Form1 與 Form2 表單皆會出現如下圖對話方塊,告知您目前皆連接到 Northwind.mdf 資料庫。

    p.16-20

    以上完整程式寫法如下:

    01 using System.Data.SqlClient; ……. 02 SqlConnection cn = new SqlConnection("連接字串"); 03 SqlCommand cmd ; 04 SqlDataReader dr ; 05 cmd = new SqlCommand("SQL 命令或預儲程序名稱", cn); 06 cn.Open(); // 開啟與資料庫的連接 07 dr = cmd.ExecuteReader(); ……. // 使用 DataReader 物件讀取資料庫內容 08 cn.Close(); // 關閉與資料庫的連接

  • Case 02 引用 System.Data.OleDb 命名空間

    (適用 SQL Server 6.5 以上、Access、Excel…等版本的資料庫)

    01 using System.Data.OleDb; ……. 02 OleDbConnection cn = new OleDbConnection("連接字串"); 03 OleDbCommand cmd ; 04 OleDbDataReader dr ; 05 cmd = new OleDbCommand("SQL 命令或預儲程序名稱", cn); 06 cn.Open(); // 開啟與資料庫的連接 07 dr = cmd.ExecuteReader(); ……. // 使用 DataReader 物件讀取資料庫內容 08 cn.Close(); // 關閉與資料庫的連接

    p.16-27

    方法 功能

    GetDecimal 取得資料並轉成 decimal 貨幣型別資料。

    GetInt16 取得資料並轉成短整數 short 型別資料。

    GetInt32 取得資料並轉成整數 int 型別資料。

    GetInt64 取得資料並轉成長整數 long 型別資料。

    p.16-52 注意

    在範例 SqlStringDemo1.sln 的 txtName 文字方塊內輸入含有「’」(單引號)符號時,然後再按下 鈕,此時程式執行時會發生執行時期的例外錯誤。例如:下圖是輸入「Jack’wu」所出現的執行結果。

    p.16-53

    上述 SQL 語法執行時,會將 Jack 視為字串(因為 Jack 被單引號括住),而 wu’的資料因為前面少了一個單引號而發生錯誤,此種情形該如何解決呢?在 SQL 語法中將連續兩個單引號「’’」視為一個單引號,所以我們可使用 string 字串類別的Replace 方法將字串中的一個單引號取代為兩個單引號:請將範例 SqlString Demo1.sln 的第 25 行敘述:

    string selectCmd = "SELECT * FROM 成績單 WHERE 姓名 = ‘" + searchName + "’" ;

    修改為下列敘述即可,例如範例 SqlStringDemo2.sln 就是使用這種方式。

    string SelectCmd = "SELECT * FROM 成績單 WHERE 姓名 = ‘" + searchName.Replace("’", "’’") + "’" ;

  • p.16-63 53 // 按下 [修改] 鈕執行

    54 private void btnUpdate_Click(object sender, EventArgs e)

    p.16-69 60 // 按下 [修改] 鈕執行此事件

    61 private void btnUpdate_Click(object sender, EventArgs e)

    p.16-73

    p.16-76 53 // 取得使用者的餘額並指定給 myMoney

    54 int myMoney = int.Parse(dr1["餘額"].ToString());

    p.17-12

    編號下拉式清單選編號 5 記錄的畫面

    p.17-15

    Step 02 使用 DataSet 物件的 Relations 集合物件的 Add 方法加入一個關聯物件,並且設定兩個 DataTable 物件中哪兩個欄位要進行關聯。寫法如下:

    ds.Relations.Add("關聯名稱", ds.Tables["dt1"].Columns["dt1 要關聯的 Primary Key 欄位名稱"], ds.Tables["dt2"].Columns["dt2 要關聯的 Foreign Key 欄位名稱"] );

    p.17-25 97 bm.Position += 1;

    98 }

    99 Checkbm();

  • p.18-18 46 // 按 [修改] 鈕執行此事件

    47 private void btnUpdate_Click(object sender, EventArgs e)

    48 {

    p.19-2

    LINQ 最大的特質是具備資料查詢的能力以及和語言進行整合的能力,它具備像 SQL Query 查詢能力的功能,也可以直接和 VB 與 C# 語法進行整合(VB 及 C#必須是 2008 以上的版本才能支援 LINQ),使得 VB 和 C# 內建查詢的功能。LINQ依使用對象可分成下列幾種技術類型:

    p.19-3

    4. 獲得 Visual Studio 2010 及 Visual C# 2010 Express Edition 整合開發環境的IntelliSense 支援。也就是說撰寫 LINQ 查詢運算式時會出現提示子句或當輸入「.」時,皆有相關屬性與方法列出來供您選取,不用像撰寫查詢 SQL字串時還必須牢牢記住 SQL 語法才行。

    p.19-12

    LINQ to XML 是使用 LINQ 語法來查詢、建立、存取 XML 的技術,讓程式設計師透過 LINQ 查詢語言即可以操作 XML 文件,不用再學習其它的 XML 類別、API、XPath、XQuery 等技術,透過 LINQ to XML 撰寫 XML 程式變得簡單許多。下面步驟示範查詢 person.xml 文件寫法,假設 person.xml 文件內容如下:

    p.19-19

    由於 LINQ to SQL 是一種與關聯式資料庫對應的技術,因此資料庫會與程式中的物件直接對應,要如何將程式中的物件與資料庫做對應,首先必須將類別宣

    告為 Entity 類別,並將類別的成員對應到資料表的欄位。…..

    p.20-11

    Step 06 測試網頁

    執行【偵錯(D)/開始偵錯(S)】開啟網頁的並測試執行結果。

  • p.20-16

    Step 05 使用 SqlDataSource 連接資料來源

    如下圖,請由工具箱的「資料」工具拖曳「SqlDataSource」控制項,該控制項預設名稱為「SqlDataSource1」。在此步驟使用 SqlDataSource1 控制項連接 ch20DB.mdf 資料庫,並透過該控制項產生可以查詢、新增、修改、刪除的 SELECT, INSERT, UPDATE, DELETE 的 SQL 陳述式。

    p.20-27

    Step 05 使用 SqlDataSource 連接資料來源

    如下圖,請由工具箱的「資料」工具拖曳「SqlDataSource」控制項,該控制項預設名稱為「SqlDataSource1」。在此步驟使用 SqlDataSource1 控制項連接 Northwind.mdf 資料庫,並透過該控制項產生建立可查詢某類別名稱共有多少產品的 SELECT SQL 陳述式。

    p.21-7

    2. 請您注意一下位址列上的位址:「http://localhost:1634/FirstWs/ WebService.asmx」這個位址就是我們這個 Web 服務的路徑,其中FirstWs 是網站的名稱,而 WebService 則是類別名稱。由於我們只新增一個名為 Add 的方法,因此畫面上只顯示一個 Add 方法,請在 Add超連結文字上按一下,會開啟這個方法的測試網頁,如下圖所示:

    p.21-8

    2. 在「加入參考服務」視窗的「位址(A)」列中輸入上節建立 Web 服務的

    位址:http:// localhost :1634/FirstWs/WebService.asmx,並按 鍵…

    p.21-9

    3. 加入 Web 服務的參考之後,您就可以在「方案總管」中看到所加入的Web 服務參考,其中 Web 服務的類別名稱就是「ServiceReference1. WebServiceSoapClient」。

    p.21-12

    2. 如果執行程式時出現下圖畫面,告訴我們 Web 服務的位址不正確,此時有可能是伺服器關機,或是 Web 服務位址有誤。

  • p.21-13 5. 上述資料型別所形成的陣列物件。

    p.A-4

    IsLetterOrDigit

    語法:char.IsLetterOrDigit(string s,int index); ;

    功能:判斷位於指定字串的指定位置的字元是否為字母或數字字

    元。

    範例:string s ="a1c3"; bool result3=char.IsLetter(s,2); //檢查 'c' 字元 Console.WriteLine(result3); // 顯示 True

    IsSeparator

    語法:char.IsSeparator(string s,int index);

    功能:判斷位於指定字串的指定位置的字元是否為分隔符號字

    元,如空白鍵即是分隔符號。

    範例:string s ="Good Day"; bool result3=char.IsSeparator(s,4); //檢查 ' ' 字元 Console.WriteLine(result3); // 顯示 True

    p.A-5

    IsUpper

    語法:bool char.IsUpper(string s,int index);

    功能:判斷位於指定字串的指定位置的字元是否為大寫字元。

    範例:string s ="Good+Day!"; bool result3=char.IsUpper(s,5); //檢查 'D' 字元 Console.WriteLine(result3); // 顯示 True

    IsWhiteSpace

    語法:bool char.IsWhiteSpace(string s,int index);

    功能:判斷位於指定字串的指定位置的字元是否為空白字元。

    範例:string s ="Good Day!"; bool result3=char.IsWhiteSpace(s,4); //檢查 ' ' 字元 Console.WriteLine(result3); // 顯示 True

    p.A-7

    Copy 方法

    語法:str1=String.Copy(str2) ;

    功能:將 str2 字串複製給 str1 字串變數。

    範例:str1 ="Hello" ; str2="World !" ; str1=String.Copy(str2) ; //str1

  • p.A-8

    Concat 方法

    語法:str3.Concat(str1,str2) ;

    String.Concat(str1,str2) ;

    功能:將 str1 字串和 str2 字串連接。

    範例:str1 ="Hello" ; str2="World !" ; str3.Concat(str1,str2) ; //str3