2009年12月25日 星期五

WPF 4 的Data binding

VS 2010 中WPF 4 在Data binding 增加一些新功能, 它終於有原本Windows From 中 Data 選單中的功能 (連到資料來源後, 直接拖拉就可做出資料表單)



在VS2008 WPF專案裡若要指定DataBinding, 只有一個方法那就是輸入XAML, 否則就得要用Expression Blend設計工具才有比較親切的Data Binding屬性視窗

VS2010 WPF 專案屬性視窗終於有了比較親切的Data Binding 屬性功能.







2009年6月1日 星期一

如何傳入/出參數到Workflow

step1. 在Workflow 類別宣告屬性:
public string UserName { get; set; }
public string Result { get; set; }

step2. 在Host 程式啟動Workflow 之前建立一個Dictionary 的集合
Dictionary param = new Dictionary();
param.Add("UserName", textBox1.Text);
param.Add("Result", null);

step3. CreateWorkflow 時在第二個參數傳入集合
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WorkflowLibrary1.Workflow1),param);
instance.Start();

接收Workflow 傳出的參數:
在 WorkflowCompleted 事件取得 e.OutputParameters 集合
result = e.OutputParameters["Result"].ToString();

2009年5月10日 星期日

ASP.NET Web Site 使用Trace.WriteLine()無效??

ASP.NET 有提供追蹤的功能, 你在網頁是會這樣寫:
Trace.Write("category","message")

這個實際上是System.Web.TraceContext類別. 它當然不會有問題.

這裡說的是System.Diagnostics 命名空間中的Trace 類別.
當你在網頁中撰寫Trace.WriteLine() 的指令時, 會發現無效, 不管是不是在除錯模式下, 它無法被列印出來.

這是因為Visual Studio的Web Site 專案模式, 對於網頁的編譯動作並沒有將TRACE 定義編譯進來, 所以Trace 指令會無效.

因此, 必須修改Web.config 的<system.codedom> 中的 <compiler ...
要加上 compilerOptions, VB 與 C# 的參數不同.
VB
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warninglevel="4" compilerOptions="/d:TRACE=TRUE" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

C#
<compiler language="c#;cs;csharp" extension=".cs" warninglevel="4" compilerOptions="/d:TRACE" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

預設System.Diagnostics.Trace 會輸出到Visual Studio 的Output Window, 可是大部份的情況會想讓他輸出的檔案或事件檢視器, 你可以再加上以下設定:
<configuration> <system.diagnostics> <trace autoflush="true" >
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, system version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
<add name="MyEventListener" type="System.Diagnostics.EventLogTraceListener, system version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="MyConfigEventLog"/>
</listeners>
</trace>
</system.diagnostics>

另一個問題:
如何ASP.NET 的Trace.Write("category","message") 功能也可以像System.Diagnostics的Trace 一樣可以輸出到檔案或事件記錄檔呢?
答案很簡單:
<configuration>
<system.web>
<trace enabled="true" writeToDiagnosticsTrace="true" />
<system.web>
<configuration>

當然要能成功的輸出必須設定compilerOptions 及 listener

2009年5月2日 星期六

List 的 其他排序選擇

List 有提供 Sort 方法, 當你呼叫它時, 它會根據項目的型別裡實作的IComparable介面的CompareTo方法排序.

同學問到了, 如果我想提供其他的排序方式, 怎麼寫?

可以在項目的型別裡加上新的比較方法:
Shared Function EmpSortByName(ByVal emp1 As Employee, ByVal emp2 As Employee) As Integer
Return emp1.Name.CompareTo(emp2.Name)
End Function

然後在呼叫Sort 方法時指定這個Delegate
Dim employees As New List(Of Employee)
employees.Add(New Employee(101, "Anita", #7/1/1999#))
employees.Add(New Employee(201, "Andy", #7/1/1998#))
employees.Add(New Employee(301, "Lisa", #1/1/2009#))
employees.Add(New Employee(102, "Mary", #7/1/2000#))
employees.Sort(AddressOf Employee.EmpSortByName)

2009年4月13日 星期一

Window Service 如何偵錯?

這是4/12 上 u2956c .NET Framework 課程時同學問的問題.

解法步驟如下:

  1. 首先啟用你寫好的Windows Service
  2. 開啟要偵錯的Windows Service 專案, 並設定中斷點.
  3. 接著Tools --> Attach to Process, 選取服務的Proccess 項目 (如果找不到請勾選 Show processes from all users, 就可找到)

這樣就可以進入Windows 服務的偵錯模式了.

2009年4月9日 星期四

在Windows Server 2008 上使用.NET 3.0的特性

Winwdows Server 2008改變很大, 有多大, 我不是這方面的專家,
只就我需要用到的功能來討論.

如果你是一個開發者, 網頁的開發者, WPF, WCF, WF (.NET 3.0)的開發者
那麼你一定需要用到IIS, 以及.NET Framework 3.0 的一些元件,
在Windows Server 2008這些預設並不會安裝進來, 必須自行安裝.

如果你與我一樣, 直接到新增移除程式去安裝的話, 下場就是...找不到你要的項目...嗚~

那些Windows 元件到那裡去了?

答案是在 "Server Manager"
接下來是我的筆記, 只要按步驟就可找到要的項目了.

安裝IIS
如果這台 Server 準備當做 Web Server, 那麼它就是擔任一個 Web Server 的角色,
所以要到Server Manager 裡的Roles 項目, Add Roles 裡就可找到IIS 了.

安裝.NET Framework 3.0要用的功能
Server Manager 裡的Roles 項目, Add Roles, Application Server Foundation
另外還要安裝.NET Framework 3.0 Features
Server Manager 裡的Features項目, Add Features, 選.Net Framework 3.0 Features

將Windows Server 2008 桌面主題變成Vista 的Aero

Windows Server 2008 的工作主要是後端的服務工作, 不太需要太美的畫面.
所以它出廠預設使用的桌面主題以Windows Classic 或 Standard 為主.
你無法在 Appearance Settings 裡看到 Windows Aero 的項目.

可是, 如果你像我一樣, 必須有個Server 環境同時又會在上面開發Client 端的軟體,
使用Windows Server 2008 時, 你一定很希望看到如同使用者會看到的Vista 界面,
有解嗎?

有的.

如下步驟:
1.在Server Manager的 Features 項目上, 按Add Features, 將Desktop Experience 項目安裝進來.
2.重新開機.
3.Administrative Tools --> Service , 啟用Theme
4.在Desktop 上按右鍵, 選Personalization
5.Appearance 項目上就會看到Windows Aero, 選擇並套用即可.