顯示具有 技術筆記 標籤的文章。 顯示所有文章
顯示具有 技術筆記 標籤的文章。 顯示所有文章

2010年12月20日 星期一

[技術筆記](CSS) word-wrap: 讓英文字自動斷行

常遇到在固定寬度的TABLE中顯示URL,但是URL太長因此超出TABLE預設的寬度,不會自動換行,可以用以下的CSS STYLE解決:
word-wrap: break-word;
word-break: break-all;


說明:
1. word-wrap: 超過寬度時是否要換行
2. word-break: 斷字的方法
 
以上語法適用於div、td、body、p...等

2010年12月15日 星期三

[技術筆記] 在windows server 2008的工作排程中執行IE開啟網頁

源起
在開發網路程式(ASP、ASP.NET...等)時,有些功能必須重複執行,通常會使用排程來設定這樣的工作。
但是如果程式設計師只有網路程式的經驗,不會寫WIN-FORM程式,好像也沒關係,寫成WEB版再設定以IE開啟即可。

以前的解決方案

指令如下:

"C:\Program Files\Internet Explorer\iexplore.exe" "http://url/?par1=value"

注意:因為路徑有空白,因此要加上"",否則會有找不到程式的錯誤

將指令設定到『工作排程』中執行即可完成此項任務。

問題點
但是這樣的解決方案看似容易,確有幾個問題:
1. IE是CLIENT端程式,必須在登入狀況下才能執行
2. IE會自動開啟,但是不會自動結束
3. IE是個大程式,佔用很多資源

2、3還好解決,用『工作排程』可以結束執行中的IE
1可以用自動登入來解決



最佳解決方案
最近SERVER換成Windows Server 2008,重新思考這個問題,希望能有較好的解決方案。
網路找了一下,發現有人用VBS來取代IE,是個不錯的方法,VBS程式碼列表如下:

Call OpenURL()
Sub OpenURL()
'Force the script to finish on an error.
On Error Resume Next


'Declare variables
Dim objRequest
Dim URL
Set objRequest = CreateObject("Microsoft.XMLHTTP")


'Put together the URL link appending the Variables.
URL = "http://url?par1=value"


'Open the HTTP request and pass the URL to the objRequest object
objRequest.open "POST", URL , false


'Send the HTML Request
objRequest.Send


'Set the object to nothing
Set objRequest = Nothing
End Sub


主要原理是建立一個Microsoft.XMLHTTP object來取代IE

執行VBS: cscript xxx.vbs
執行時會開啟一個DOS CMD,執行完自動結束,比開啟IE快10倍

如此一來,一次解決以上三個問題,太帥了

2010年12月6日 星期一

[技術筆記] ASP.NET 內建event執行順序

在ASP.NET程式中,提供許多內建的EVENT,可以用來處理一些功能,如果只有單獨一個PAGE,就比較單純。但是當導入Master Page以及User Control後,通常讓程式設計師無所適從,在此整理相關訊息:

單獨一個PAGE的狀況
1. PreInit
2. Init
3. PreLoad
4. Load
5. Load Complete
6. PreRender
7. PreRender Complete
8. Unload




考慮比較複雜的狀況
Content page、Master page以及User Control(包括Content page controlsMaster page controls)
1.Content page PreInit event.

2.Master page controls Init event.
3.Content page controls Init event.
4.Master page Init event.
5.Content page Init event.

6.Content page Load event.
7.Master page Load event.
8.Master page controls Load event.
9.Content page controls Load event.

10.Content page PreRender event.
11.Master page PreRender event.
12.Master page controls PreRender event.
13.Content page controls PreRender event.

14.Master page controls Unload event.
15.Content page controls Unload event.
16.Master page Unload event.
17.Content page Unload event.


Microsoft提供下圖做為參考(但是不含MasterPage)

2009年10月13日 星期二

C# Programing Notes

1. How to check object null


2. How to check db object null
if(myDataSet.Rows[0]["columnName"] == DBNull.Value)

2009年8月11日 星期二

防止多次SUBMIT的方法

WEB FORM中,有時後使用者按下『SUBMIT』時,連接至SERVER過慢,忍不住多按幾下,有時會造成多次執行的結果,例如資料重複或是EMAIL重複發出。

要防止這個問題,以下是最簡單的方式:
-------------------------------------------------------------------------

<script language="javascript">
var submitted = false;
</script>

...

<form onsubmit="if (!submitted) {submitted = true; return true;} else return false;">

...

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

說明:
1. 一定要在CLIENT端處理,因此選用Javascript
2. 有些人用的方式是DISABLE SUBMIT按鈕,但是每支程式的都不同,很難達成
3. 利用一般form的檢查機制,輕易完成此一任務
4. 若有其他form的檢查機制需要自行調整
5. ASP.NET的MASTER PAGE,也可以套用,甚至更方便,只要改一個地方即可
6. 此方法適用各類WEB語言



2009年8月4日 星期二

Cascading Dropdown List(多層次) 初值設定 (ASP.NET)

Cascading Dropdown List(多層次)的製作在各種程式中應用廣泛,也有需多人提出實例教學,因此不在此多說。

一般Cascading Dropdown List(多層次)是應用於資料查詢上,但是若是應用在資料編輯,就遇到有設定初值的問題。

方法如下:
(以2階為例、兩個Dropdown List:List1, List2、初值分別是value1, value2)
1. 先將List1的Items設定好
2. List1.SelectedValue = value1;
3. 依據List1初值value1,設定好List2的Items
4. List2.SelectedValue = value2;

若List2有data binding,則步驟3可以改為:
List2.Items.Clear();
SqlDataSource2.SelectParameters[0].DefaultValue = value1;
DataView view = (DataView)SqlDataSource2.Select(DataSourceSelectArguments.Empty);
SqlDataSource2.DataBind();

2009年7月22日 星期三

[技術筆記] SQL Server Full-text Search全文檢索

--Implementing Full Text Search with T-SQL stored Procedures / Eli Leiba
Enabeling Full Text search in T-SQL is usually not so "popular" as doing it with the EnterPrize Manager
So Here are the T-SQL steps you have to do in order to implement FTS in T-SQL

--1 Enabling full text on the database
EXEC sp_fulltext_database 'enable'

--2 Create the Catalog (if does not exist)
EXEC sp_fulltext_catalog 'MyCatalog','create'

--3 add a full text index on a Table
EXEC sp_fulltext_table 'Products', 'create', 'MyCatalog', 'pk_products'
EXEC sp_fulltext_table 'Categories', 'create', 'MyCatalog', 'pk_categories'

--4 add a column to the full text Index
EXEC sp_fulltext_column 'Products', 'ProductName', 'add'
EXEC sp_fulltext_column 'Categories', 'Description', 'add'

--5 activate the index
EXEC sp_fulltext_table 'Products','activate'
EXEC sp_fulltext_table 'Categories','activate'

--6 start full population
EXEC sp_fulltext_catalog 'MyCatalog', 'start_full'

-- usage in T-SQL (CONTAINS and FREETEXT predicates)
-- Using the index in T-SQL
USE Northwind
GO
SELECT ProductId, ProductName, UnitPriceFROM Products
WHERE CONTAINS( ProductName, ' "sasquatch " OR "stout" ' )
GO
USE Northwind
GO
SELECT CategoryNameFROM Categories
FREETEXT (Description, 'sweetest candy bread and dry meat' )
GO

2009年7月21日 星期二

[技術筆記] SharePoint 2007 開發與管理需要的工具與軟體

[技術筆記] Repeater中尋找控制項

作  者:黃家瑞 精誠資訊 恆逸教育訓練中心講師
技術分類:程式設計

Repeater
開發ASP.NET程式時,Repeater是一個非常實用的控制項,可是實際操作時總會遇到點瓶頸,就像以下的例子(以北風northwind資料庫作為例子),當完成了將員工資料利用Repeater載入網頁後,面臨一個頭痛的問題,在每個Itemtemplate裡面的按鈕,btnCalc按下去後,希望可以算出該項目的資料(這裡以計算出到目前為止的年資為例),問題是,怎麼”找到”這一個項目中的控制項內容?
"    SelectCommand="SELECT [EmployeeID], [FirstName], [LastName], [HireDate]            FROM [Employees]">







  EmployeeId:<%#Eval("EmployeeId") %>


  Name:<%#Eval("FirstName") %> <%#Eval("LastName") %>


  HireDate:' />


  

  

  




>  


利用一個簡單的語法就可以找到按鈕旁邊的Label控制項。
protected void btnCalc_Click(object sender, EventArgs e) {
Label lblDate = (Label)((Button)sender).NamingContainer.FindControl("lblHireDate"); Label lblYr = (Label)((Button)sender).NamingContainer.FindControl("lblYear");   DateTime d;
if (DateTime.TryParse(lblDate.Text, out d))
 lblYr.Text = (DateTime.Today.Subtract(d).Days / 365.0).ToString("#.00");
}

NamingContainer可以在Repeater中找到目前控制項的容器(Container),在這個容器中,找到該控制項。這樣子就可以很容易的操作在Repeater中的控制項了。