2010年8月31日 星期二

crystal report 載入報表錯誤 問題

15-0820測報
這是一個由crystal report的預設值所引起的問題
HKEY_LOCAL_MACHINE->SOFTWARE->Crystal Decisions->10.2->Report ApplicationServer->Server>PrintJobLimit中設定了crystal report在每各AP session中的同時存在數量。
當報表元件被引用後,AP中的PrintJobLimit counter就會+1
如果直接關閉元件或由呼叫者關閉,此counter將不會減少,當列印/產生多張報表時,就有可能碰到超出limit的問題而造成載入報表失敗錯誤。

由於PrintJobLimitapplication範圍計數器,因此開啟其他報表也會產生同樣問題(如下)
也就是說,此錯誤發生後,必須開啟另一程式或關閉重開同一程式才能再次列印報表

解決方法:對引用或呼叫含有crystal report元件的程式中使用以下指令
crystalReporter.close();
crystalReporter.dispose();

015測報
原始錯誤畫面

PrintJobLimit設定為2進行測試
修改前
列印兩次後,第三次就會發生錯誤

修改後
起始畫面
修改後
        多次開啟報表也不會有問題

別用Macjournal寫部落格..

Macjournal是個不錯的記事軟體
他提供了整合的記事功能,可以分門別類的歸納想法在一個記錄中
使用Macjournal,你可以把所有的筆記或是想法放在同一個地方而不用到處開檔案
但是,他提供的功能並不多
事實上,Macjouranl連自行修改html的功能都沒有
這未必是一個壞處,就像我們使用Word時只會想要選取文字然後點兩下功能鍵套用樣式就好
但是當你打算使用Macjournal寫部落格/網誌時,這就是一個大問題了
我現在就碰到無法直接提供程式碼區塊的問題以及段落分行問題
程式碼區塊部分,我必須要先上傳內文然後再blogspot上面再次修改
段落分行就更麻煩了
上傳之後一樣要到blogspot的編輯器裡面重新標註段落間的區隔
由於Macjournal上傳時沒有使用換行標籤,就算兩個段落之間隔了10行,blogspot依然只會看做一次換行
最後一個問題我還在研究
當我在blogspot上面寫完東西後,Maujournal上我找不到同步指令..
第一次在Macjournal上面建立部落格帳號時,他會自動取得部落格文章
可是我目前為止沒有找到同步文章的指令..
綜合以上所述
如果你是Mac使用者,又考慮找一個單純的部落格軟體,那別買Macjournal
(對了,他們的客戶支援很慢..我寄信詢問已經四天了,目前都沒有回覆)
如果你是要找一個記事軟體,Macjournal是一個不錯的軟體,雖然格式有點陽春,不過該有的都有
而且要在文章中放圖片也很容易

winform中datagridview的Frozen屬性用法要點

當想要讓datagridview左邊行數凍結時,通常可以很快的使用datagridview.Columns["name"].Frozen=True來讓他凍結
但是在使用上有一些要點

1. 設定時,是讓該行左方的欄位都會凍結
如果是row,就是該列上方的紀錄
也因此,一次只需要設定一欄或一行的Frozen屬性即可

2. 設定凍結前,要先把各行列的位置搞定
簡單來說,如果要把資料來源中第20行放到第3行顯示,並讓左方凍結,就必須要依照以下順序
Columns[19].DisplayIndex=2;
Columns[19].Frozen = true;

2010年8月30日 星期一

MSN/噗浪/fb/Twitter的屬性差別

現在各種社交網站服務越來越多
就我的感覺,各種不同的服務大概有以下傾向
當然,這並不是絕對的,只能說是我自己的使用傾向
msn/yahoo:一次和一個人或一組人聊天,話題很明確
相對的就是沒啥話題時,通常就只會看著他的長命燈和狀態了解他過的如何
受益於他出現的時間比較早,所以這上面的朋友是最多的
facebook:
相較於msn,這上面的朋友提供了較多的訊息
無論是遊戲、推讚之類的,都可以幫助你更了解朋友在做什麼、在想什麼
噗浪/plurk:
這是很murmur的一個服務,性質和facebook的塗鴉牆很類似
至於為何不用塗鴉牆?
嗯..大概是因為facebook上面的訊息中有一半以上都是朋友玩了哪些遊戲所發出來的訊息,這些訊息並不是那麼引起我的興趣
bbs:
提供的隱匿性是最高的,除非是認識的人,不然頂多從ip知道你大概是從哪來,很難獲得你的其他資訊和歷史文章
而且純文字方式提供的訊息含量相對來說,性價比最高(以網路流量來看)
此外,80%的時間只要四個方向鍵就可以操作
這點對我而言有很大吸引力 XD
部落格:
這是一個提供完整文章的地方,雖然有人也是用寫流水帳方式寫部落格,不過因為那樣太沒有意義,所以現在都慢慢轉到facebook或噗浪去murmur了
部落格像是一張稿紙,我會預期在這上面看到一些個人思想的整理
twitter:
推特其實我用的不多,因為那和我的習性不合
他大致上是幫助你感興趣人物的動態和發言
但是由於操作介面和邏輯的不同,因此我會用它來追蹤一些意見領袖的發言
當然這也和台灣的普及率不高有關
訊息的基礎是發出和接收
但是發出的訊息內容的長短、訊息發送的難易、接收方式的差別、接收者屬性等決定了以上這些服務對我的使用傾向
plurk用一個單行、簡單的訊息視窗讓我想到什麼就可以打什麼
blog提供一個全功能的編寫介面,讓我可以完整的寫出自己的想法並加以檢視,同時日後還可以回頭完善
因此我只是想叫一叫今天天氣好棒,好想去爬山時,我不會想開個blog來折磨自己
但是那個想叫一叫、跳一跳的慾望依然存在,因此會有微網誌(噗浪、twitter)之類的服務興起
不過,這些工具都只是工具,如何使用,其實都要看個人習慣
我只能說,由於他們的介面方式,造就了使用者的使用傾向

2010年8月26日 星期四

Fences 桌面收納盒軟體

參考連結
Fences 桌面收納盒

官方網站
fences官網

這東西真的很棒,可以幫桌面的圖示做分類
如果你會把一些常用的捷徑或資料夾放在桌面,那這東西是必備
不過對某些人,像我學弟那種桌面圖示擺到滿出來的人就算了
(好像都是啥hotgirl_001.jpg, hotgirl_002.jpg etc之類的檔案?)

2010年8月25日 星期三

HTML版面設計技巧

一、有多語時,使用unicode字型。
不過使用unicode時,可能有缺字問題:在中日韓下,可能會有特殊字不在字型內的問題。
特殊字型
台語:台語白話字Unicode編碼e字型,包含「Combining Dot Above Right]
日語:Arial Unicode MS
如果沒有指定
FIREFOX下,日語使用MS Gothic、MS PGothic(等寬字),MS PMincho(明朝體,有點類似中文的細明體),這樣的選擇是日本人向 Mozilla 開發團隊建議的。而 IE 只會選用兩種字體 Gothic 和 PGothic。

二、版面設計
文字的對齊使用
style="text-align:justify;text-justify:distribute-all-lines"

三、元素定位
HTML的各種元素位置非常混亂且善變
初期設計時,用表格拉出大致的位置是很方便的做法
之後可以在表格中塞DIV處理
是很好用的東西,不過要注意CSS中的套用方法
.class table, .class th,.class tr,.class td

DIV和SPAN的差別

表格中使用float屬性的問題


4.Flash
Flash在許多情況下會有無法展開的問題,要設定所處的DIV寬高才能影響到flash的寬度、高度
html, body, #containerA { height:100%; }

其他的CSS相關聯結
轉:CSS兼容IE6,IE7,FF的技巧

資料庫問題
首先,資料庫的內容編碼和網頁的編碼要一致,不一致的話,以後會很辛苦
基本上,推薦用UTF-8儲存(UTF-8和Unicode有點不同,別搞混)
MySQL和PHP的編碼設定有以下,最好全部都設定一次

微型ASP.NET編輯器mini c# lab與snippet compiler測試心得

有時候只是想檢驗一些語法的可行性或者想測試物件內容時
開VS寫各專案會覺得很大材小用
所以就找了一下,發現真的有一些精美的小程式可以拿來做這種應用
目前看到的有mini c# lab和snippet compiler
mini c# lab好像是黑暗大寫的
目前到1.4與1.3的差別主要在於可以執行batch工作
不過我沒測試到這功能
而snippet compiler是我第一個找到的這類型編輯器


兩者的比較大致如下

1. 介面及功能
首先mini c#的介面比較漂亮,但是功能比較少,可是可選擇ASP.NET 2/3.5以及VB/C#語言
而且output整合在視窗中
snippet compiler功能比較多,但是只支援2.0和C#語法,output使用console,使用時要加入console.readline()不然視窗會很快消失
但是!snippet compiler可以加入參考,光這一點我就傾向使用snippet compiler了
兩個都不支援輸入提示

2. 使用
mini c#發生語法錯誤會造成程式錯誤直接關掉
SC則會提示

3. 速度
然後snippet compiler預設提供了簡單的console輸出語法而mini c#沒有,不過因為很簡單,所以copy一下就可以快樂的應用 XD
在反應速度上,snippet compiler比較優秀,不過mini c#系列並沒有輸很多
但是在資源使用上


不過在測試過三者之後,我決定暫時放棄..
因為在有引用System的情況下,三者都無法處理Datetime物件 orz

2010年8月24日 星期二

convert.ToInt32, (int), int.Parse的差別

忽然想知道這三者是否等價,結果查了一下發現有一些細微差別
這篇文章主要從這邊看來
Convert.ToInt32、(int)和int.Parse三者的区别2008-06-26 07:01 P.M.Convert.ToInt32、(int)和int.Parse三者的区别:

結論:
1. convert.toxxx針對物件,碰到null回傳0所以不會失敗,
轉換規則是四捨五入
2. int.parse只能處理字串,碰到null會失敗,要有檢查機制(==null? tyr/catch),
轉換規則:無,所以只能用於整數字串
3. (int)負責轉型,只能針對簡單資料
規則是無條件捨去


Convert.ToInt32、(int)和int.Parse三者的區別:
前者適合將object類類型轉換成int類型,如Convert.ToInt32(session["shuzi"]);
(int)適合簡單資料類型之間的轉換;
int.Parse適合將string類類型轉換成int類型,如int.Parse(session["shuzi"].ToString())。


(1)這兩個方法的最大不同是它們對null值的處理方法:
Convert.ToInt32(null)會返回0而不會產生任何異常,但int.Parse(null)則會產生異常。
沒搞清楚Convert.ToInt32和int.Parse()的細細微區別時千萬別亂用,否則可能會產生無法預料的結果,舉例來說:假如從url中取一個參數page的值,我們知道這個值是一個int,所以即可以用Convert.ToInt32(Request.QueryString["page"]),也可以用,int.Parse(Request.QueryString["page"]),但是如果page這個參數在url中不存在,那麼前者將返回0,0可能是一個有效的值,所以你不知道url中原來根本就沒有這個參數而繼續進行下一下的處理,這就可能產生意想不到的效果,而用後一種辦法的話沒有page這個參數會拋出異常,我們可以捕獲異常然後再做相應的處理,比如提示用戶缺少參數,而不是把參數值當做0來處理。
(2)還有一點區別就是
a. Convert.ToInt32(double value)
如果 value 為兩個整數中間的數位,則返回二者中的偶數;即 3.5轉換為4,4.5 轉換為 4,而 5.5 轉換為 6。 不過4.6可以轉換為5,4.4轉換為4
b. int.Parse("4.5")
直接報錯:"輸入字串的格式不正確".
c. int(4.6) = 4
Int轉化其他數值類型為Int時沒有四捨五入,強制轉換

int.Parse是轉換String為int
Convert.ToInt32是轉換繼承自Object的物件為int的.
你得到一個object物件,你想把它轉換為int,用int.Parse就不可以,要用Convert.ToInt32.

個人總結:
(1)Convert.ToInt32的參數比較多,Int.Parse只能轉換string類型的.
(2)Parse就是把String轉換成int,char,double....等,也就是*.Parse(string) 括弧中的一定要是string.
(3)Convert可以提供多種類型的轉換,也就是Convert.*()括弧中可以為很多種類型(包括string).
(4)至於效率上的區別可以看看這遍文章:《細說Convert和Parse到底那個效率高》

2010年8月23日 星期一

SQL語法探討:關於left/right join和inner join

其實以前一直無法理解left/right join的存在理由

以資料準確性和資源利用率來說,inner join或者說 select * from table where id=‘id’比起left好多了

不過這幾天經過學長的開導,發現了left join之類的存在理由

簡單來說,資料完整性

如果我們有一個訂單table_order,裡面有連結到客戶資料表table_cus的id_cust

使用inner join時,當id_cust在table_cust中不存在時,該資料就無法被選擇到

如 select a.order, b.name_cust from table order a , table_cust b where a.id_cust=b.id_cust where a.date between ‘2010/1/1’ and ‘2010/2/1’

這會造成資料的缺失,

簡單來說就是本來有100筆資料

但是其中10筆的id_cust在table_cust中不存在時

select結果就只有90筆

這種結果的問題非常大

如果放在別的情境中,當客戶發現這些資料不全時就會質問開發者

開發者需要從頭追蹤才能取得完整資訊

學長的說法是與其這樣,不如使用left join取得全部資料

之後再來處理對應的資料缺失問題

例如顯示客戶資料不存在並提示新增客戶資料之類

這個理由非常的能夠說服人

難怪有人說剛從學校畢業都用inner join

不過業界兩三年後就都用left join了 XD

2010年8月20日 星期五

datagridview行頭加上編號或自訂

設定datagridview的行頭內容指令為
dataGridView2.Rows[i].HeaderCell.Value="字串"

因此寫一個方法設定,並在databind後呼叫即可
大致如下

/// 
/// 在headcell加入編號
/// 
private void mtdSetHeadcell()
{
  if (dataGridView1.Rows.Count>0)
  {
    for (int count = 0; count < dataGridView1.Rows.Count; count++)
    {
      dataGridView1.Rows[count].HeaderCell.Value = Convert.ToString(count + 1);
    }
  }
}



如果datagridview有排序功能,要註冊DataBindingComplete事件並呼叫
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
mtdSetHeadcell();
}

PHP mysql UTF8 全解法

先說一下基本概念
mysql:
在資料儲存時,要確認所使用的編碼
建立連結時,有預設編碼
解析資料時,有預設編碼
PHP:
由於建立資料連結和解析資料時,要確認編碼

因此,整個連結流程中,要確認以上過程中的編碼


最正統解法:
建立DB連結後,執行mysql_query設定,讓PHP以utf8編碼方式存取mySql

$conn = mysql_pconnect($hostname_alcd, $username_alcd, $password_alcd) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_query("SET NAMES utf8",$conn);
mysql_query("SET CHARACTER_SET_CLIENT=utf8",$conn);
mysql_query("SET CHARACTER_SET_RESULTS=utf8",$conn);


另一作法,直接設定APACHE、PHP、MYSQL的header
以下來源:yes298,
1. 用 vi /etc/httpd/conf/httpd.conf 設定Apache中的語系為:( (記得restart)
AddDefaultCharset UTF-8

2. 用 vi /etc/php.ini 設定php中的語系為:( (記得restart)
default_charset = "utf-8"

3. 用 vi /etc/my.cnf 設定MySQL中的語系為:( (記得restart)
[mysqld]
init_connect='SET NAMES utf8'
default-character-set=utf8
[client]
default-character-set = utf8

4. 建立資料庫時選擇語系: (記得清除DB Cache)
DROP DATABASE IF EXISTS `aa`;
CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE `aa`;

CREATE TABLE IF NOT EXISTS `aat` (
`id` char(1) NOT NULL default '1',
`myStr` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

5. 用UltraEdit(v11.20a版) 轉換所有ANSI格式的php檔案轉化為UTF-8格式:
File --> Conversions --> ASCII to UTF-8 (Unicoding Editing)
( 在UltraEdit中按Advanced --> configuration --> File Handling
--> Unicode/UTF-8 Detection --> 剔選Auto detect utf-8 files )
如有需要時,可執行Remove BOM.php. 當用WinXP的Notepad將php檔由ANSI轉為UTF-8時,
因檔頭有BOM,會引起排版問題,故必須移除,執行Remove BOM.php即可自動移除.
Remove BOM.php可由以下網址下載:
http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=13&author=hoyo&status=view

6. 在php檔中必須加入:
<html>\ <head>
<meta equiv="Content-Type" content="text/html; charset=UTF-8">
</head>\<body>

7. 在連接DB的檔中必須加入3行mysql_query才ok:
$host="localhost"; $DBname="aa";
$user= "root"; $passwd = "";
$link = mysql_connect($host,$user,$passwd) or die ("Fail");
$db = mysql_select_db($DBname, $link) or die ("Fail");
// 要在真正query DB取出資料前,加入以下3行
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET_CLIENT=utf8");
mysql_query("SET CHARACTER_SET_RESULTS=utf8");
$sql = "select * from aat where crid='1'";
$rows = mysql_query($sql);

8. 在php檔中, 如有需要須注意: [Optional]
運用htmlentities和htmlspecialchars時,要似如下:
$chars = htmlentities($chars,ENT_QUOTES,"UTF-8");
$chars = htmlspecialchars($chars,ENT_QUOTES,"UTF-8");
並且在顯示前要用
$chars = html_entity_decode($chars,ENT_QUOTES,"UTF8");
如有用過addslashes()或mysql_real_escape_string()記得用以下:
$chars = stripslashes($chars);
如有需要可以用以下function將不同編碼轉換:
$chars = iconv('Big5','UTF-8',$chars); //由Big5轉為UTF-8

Microsoft Access Database Engine 2010

由於公司有一個使用64位元環境的需求,因此需要弄一套可以在64位元環境上讀取excle檔案的環境
眾所皆知的Jet OleDB 4.0是不能在64位元上面跑的
不過MS剛好在前陣子放了Microsoft Access Database Engine 2010可轉散發套件
因此今天下午被安排進行這東西的測試

以MS的傳統,我已經預期好會有許多奇妙的問題,也買好了泡麵stand by...
不過今天解決的過程異常順利,該說MS真的越來越強了嗎?

閒話不多說
其實這次只改了一個connection string就可以用了,只是內容有點奇怪
Microsoft Access Database Engine 2010安裝完後,網頁上的說明是:

1. 如果您是應用程式的使用者,請參閱應用程式文件,以取得如何使用適當驅動程式的詳細資訊。
2. 如果您是使用 OLEDB 的應用程式開發人員,請將 ConnectionString 屬性的 Provider 引數設定為 “Microsoft.ACE.OLEDB.14.0”
◦如果您連線至 Microsoft Office Excel 資料,請將 "Excel 14.0" 新增至 OLEDB 連接字串的擴充屬性。
3. 如果您是使用 ODBC 連線至 Microsoft Office Access 資料的應用程式開發人員,請將連接字串設定為 “Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=path to mdb/accdb file”
4. 如果您是使用 ODBC 連線至 Microsoft Office Excel 資料的應用程式開發人員,請將連接字串設定為“Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=path to xls/xlsx/xlsm/xlsb file”
移除此下載:

不過,14.0是錯誤的!!
正確的是12.0
我原本的conntion string:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + p_sExcelPath + ";" +
"Extended Properties=\"Excel 8.0;IMEX=1\"";
修改成如下就可以用了,oledbadapter的銜接還沒測試,不過看起來似乎沒有太大問題
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + p_sExcelPath + ";" +
"Extended Properties=\"Excel 12.0;IMEX=1\"";

下班收工,泡麵下次再來吃吧

Jquery + Autocomplete plugin 使用說明

這是JQ的Autocomplete plugin的介紹文
JQ基本觀念..就不多說了
如果要學JQ的話,可以考慮這本益大資訊~精通JavaScript+jQuery
這本的plugin介紹不多
不過目前沒有看到對plugin介紹很深入的書,因此不如把JS、JQ整個學好一點比較有用
進階點的JQ書也不少,如果已經對JS有觀念的話,直接找JQ書籍也不錯
以上是我的觀點啦

JQ的AUtocomplete有很多套件
這篇所用的是http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
官方說明:http://docs.jquery.com/Plugins/Autocomplete#Setup
寫的時候版本是JQ 1.3.2, autocomplete 1.0.2
基本重點:
1.Jquery沒有預設指定編碼,最好先進行UTF8設定
找到contentType:application/x-www-form-urlencoded
改成contentType:application/x-www-form-urlencoded; charset=UTF-8
如果資料或頁面是big5時,也要記得先進行轉換

2.可處理的資料格式,一行一筆記錄,各欄位間用 | 分隔
而換行符號要用/n而不是
(HTML寫太順手的話,容易犯這錯誤)
JSON的話,聽說要是這種格式: ["test","test","test 123","test 456"]

3.autocomplete的預設參數是q, 資料來源為web service時要記得

基本方法
1.最基本的寫法
$("ID").autocomplete(資料來源, options);
ex: $("ID").autocomplete("data.php",
{
max:10, scroll:false, width:162,
});
2.result方法在每筆列表資料產生時候都會被呼叫,並擁有三個參數(evt, data, formatted)
$("#mytextbox").autocomplete("clients.php")
.result(function (evt, data, formatted) {
$("#hiddenIDbox").val(data[1]);
});
以上例子能將mytextbox的輸入傳送到clients.php
並在取得回傳值後,將每筆記錄的第二欄位值設定為ID:hiddenIDbox的值



相關方法:
autocomplete(url or data, options)
讓指定的input或text執行,範例:$("#test").autocomplete(data)

result( handler )
得到搜索结果的句柄

search( )
触发一个search事件

flushCache( ) Returns: jQuery
清空缓存


相關參數:
setOptions( options )
參數說明
minChars,Default: 1
觸發執行autocomplete的最小字元數

delay,預設400毫秒
顯示自動自動完成選擇框的延遲時間

cacheLength,預設10
緩存長度。後端儲存的cache次數(?)。最小值1時,只會儲存目前的結果(等於沒有cache)。

matchSubset Boolean
Default: true
匹配子集,預設開啟。要有效的話,cache length要大於1。
不過還不確定運作方式..
Whether or not the autocompleter can use a cache for more specific queries. This means that all matches of "foot" are a subset of all matches for "foo". Usually this is true, and using this options decreases server load and increases performance. Only useful with cacheLength settings bigger than one, like 10.

matchCase, 預設false
大小寫選項。

matchContains,預設false
在字句內尋找。
開啟後,輸入"ba"時會搜尋到"foo bar"。
不該與autofill一起使用(混淆)。

mustMatch,預設false
必須完全匹配。設成true時,
看不懂..
If set to true, the autocompleter will only allow results that are presented by the backend. Note that illegal values result in an empty input box.

selectFirst Boolean
Default: true
如果設置為true則第一個值會被自動選中。
If this is set to true, the first autocomplete value will be automatically selected on tab/return, even if it has not been handpicked by keyboard or mouse action. If there is a handpicked (highlighted) result, that result will take precedence.
extraParams Object

以下是額外的參數,
Extra parameters for the backend. If you were to specify { bar:4 }, the autocompleter would call my_autocomplete_backend.php?q=foo&bar=4 (assuming the input box contains "foo"). The param can be a function that is called to calculate the param before each request.


formatItem Function
Default: Assumes that a single row contains a single value.
對結果進行進階的格式處理,預設的資料型態是一行中一個值,要讓一行有多值,就需要用到formatItem。
autocomplete中的每筆資料產生時,就會觸發這函數。
回傳值的基本型態是
  • xxxx


  • autoComplete會傳遞四個參數,
    1.結果列
    2.索引位置(從1開始)
    3.總資料筆數
    4.搜尋字串
    Provides advanced markup for an item. For each row of results, this function will be called. The returned value will be displayed inside an LI element in the results list. Autocompleter will provide 4 parameters: the results row, the position of the row in the list of results (starting at 1), the number of items in the list of results and the search term.

    formatMatch Function
    Default: formatItem is used
    格式化匹配項
    Use this option if you want to limit the data that autocomplete searches for matches. For example, there may be items you want displayed to the user, but don't want included in the data that's searched. Gets called with the same arguments as formatItem.

    formatResult Function
    Default: Assumes either plain data to use as result or uses the same value as provided by formatItem.
    格式化結果,注意有三個參數(資料項, 資料位置(從1開始),資料筆數)
    Similar to formatItem, but provides the formatting for the value to be put into the input field. Again three arguments: Data, position (starting with one) and total number of data.

    multiple,Default: false
    是否能放多於一個的數值
    Whether to allow more than one autocompleted-value to enter.

    multipleSeparator,Default: ", "
    Seperator to put between values when using multiple option.
    同一行中的分割符號,預設為逗號 ","
    同時也是多重選項中的分割符號


    width
    選擇框的寬度

    autoFill,Default: false
    當選中自動提示框裡面的選項時INPUT框內是否自動補全

    max Number
    Default: 10
    自動完成提示的顯示數量

    highlight Boolean ,Function
    Default: Wraps the search term in a < strong > Element
    高亮顯示當匹配到選擇框的元素。
    Whether and how to highlight matches in the select box. Set to false to disable. Set to a function to customize. The function gets the value as the first argument and the search term as the second and must return the formatted value.

    scroll,Default: true
    當結果集result set大於預設高度時是否使用卷軸顯示

    scrollHeight,高度180
    自動完成提示的卷軸高度用圖元大小表示


    根據其他選項的輸入產生資料
    $("#states").autocomplete(url, {
    extraParams: {
    country: function() { return $("#country").val(); }
    }
    });

    進階參數
    autoFill:(預設值為false):自動填充
    inputclass (預設值: “ ac_input ” )
    這個階層將被添加到輸入框。
    resultsclass (預設值: “ ac_results ” )
    階級為UL認證將包含結果專案(專案的結果是李元素) 。
    loadingclass = (預設值: “ ac_loading ” )

    lineseparator = (預設值: “ \ n ” )
    字元分隔線,結果從後端。
    cellseparator (預設值: “ | ” )
    字元分隔細胞的結果,從後端。
    minchars (預設值: 1 )
    最低的字元數使用者輸入之前, autocompleter啟動。
    拖延(預設值: 400 )
    延遲在毫秒該autocompleter等待後,一按鍵來啟動本身。如果您使用的資料財產設立一個本地陣列,您可能希望增加延遲,以在較短的時限內(如40ms ) 。
    cachelength (預設值: 1 )
    人數後端的查詢結果,存儲在緩存中。如果設置為1 (目前的結果) ,不緩存會發生。不設低於1 。
    matchsubset (預設值: 1 )
    是否或不是autocompleter可以使用一個緩存為更具體的疑問。這意味著所有匹配的“腳”是的一個子集所有匹配的“富” 。通常這是事實,和使用這個選項跌幅伺服器負載,並提高性能。記得設置cachelength ,以更大的數目,如10 。
    matchcase (預設值: 0 )
    是否或不比較是區分大小寫的。唯一重要的唯一如果您使用的緩存。
    matchcontains = options.matchcontains | | 0 ;
    是否或不是比較看來,內(即是否“廣管局”匹配“富網吧” )的搜索結果。唯一重要如果您使用的緩存。
    maxitemstoshow (預設值: -1 )
    限制的結果數量將顯示在下拉。這是非常有用的如果您有大量的資料和不想為使用者提供一份清單,列出可能包含數以百計的項目。要禁用此功能,將該值設置為-1 。
    mustmatch (預設值: 0 )
    如果設置為1 ( True ) , autocompleter將只允許結果是由後端。請注意,非法價值觀的結果,在一個空的輸入框。在為例,在本月初的檔,打字“頁腳” ,會導致一個空的輸入框。
    extraparams (預設值: ( ) )
    額外的參數為後端。如果你要指定(酒吧: 4 ) , autocompleter將要求my_autocomplete_backend.php問=富酒吧= 4 (假設輸入框包含“富” ) 。
    寬度(預設值: 0 )
    寬度設為下拉層。如果一個非正整數是指定的,那麼寬度的方塊,將取決於寬度的投入要素。一般來說,您會想要離開這個價值。然而,在某些情況下,您可能有一個小的投入要素如下拉層的需要,顯示了很多的選擇。在這種情況下,您可以指定一個較大的規模。
    selectfirst (預設值:虛假)
    如果是這樣的設置為True ,第一次自動完成的價值將被自動選定的標籤/回報率,即使沒有親自通過鍵盤或滑鼠的行動。如果有一個親自(突出) ,結果,這一結果將優先考慮。
    selectonly (預設值:虛假)
    如果是這樣的設置為TRUE ,和只存在一個自動當用戶點擊標籤/返回,這將是選定的,即使它並未親自通過鍵盤或滑鼠的行動。這是壓倒selectfirst 。
    formatitem (預設值:無)
    一個JavaScript函數,可以提供先進的標記為一個專案。每一行的結果,此功能將被稱為。返回的值將被車廂內所展示的李元素在結果清單中。 autocompleter將提供3個參數:結果連續的立場,列在名單的結果,以及有多少個項目,在結果列表。見的原始程式碼http://www.dyve.net/jquery?autocomplete一個例子。
    onselectitem (預設值:無)
    JavaScript函數將被稱為當一個項目被選中。該autocompleter將指定一個單一的說法,作為李元素被選中。李元素,這將有屬性的“額外”包含一個陣列的所有細胞,後端指定。見的原始程式碼http://www.dyve.net/jquery?autocomplete一個例子。
    onfindvalue (預設值:無)
    JavaScript函數將被稱為當findvalue ( )方法是所謂的。該函數會予以通過,專責李元素-就像o nselectitem功能。
    如果您想要做更多與您的autocompleter ,你可以改變一些方案對飛。
    該autocompleter訪問作為一個屬性,輸入框。
    例如:
    / /設置autocompleter
    無功交流= $ ( “ # input_box ” ) 。自動( “ my_autocomplete_backend.php ” ) ;
    / /會看的價值,自動框的基礎上,在文字輸入的元素
    交流[ 0 ] 。 autocompleter.findvalue ( ) ;
    有下列功能,可被稱為影響的行為,在執行時間:
    findvalue ( )
    這將研究的價值,目前在投入要素並期待它的價值,看看是否能找到一個匹配的價值。這個功能可以潛在的執行AJAX操作,因此, findvalue ( )函數沒有返回值。相反,你需要具體的一onfindvalue回呼函數將運行。這種方法是有價值的,如果您需要設置自動投入要素的價值通過JavaScript和“價值”的文本欄位映射到擴展屬性存儲在李元素的“額外”的財產。
    flushcache ( )
    這刷新緩存。
    setextraparams (目標)
    這集的額外參數的autocompleter ,以目標(即應該是一個JavaScript物件,見上文) 。
    它的往往是明智的刷新緩存後,要求setextraparameters

    正規表示式說明和工具紀錄

    程式Expresso是各不錯的asp.net正規表示式檢驗工具
    正規表示式在ASP.NET上和其他的語言中用法很類似
    不過所用的符號上有些是不同的
    如果要套用到其他語言的話,要特別注意這點


    另外,還有一個說明正規表示式很清楚的中文網站
    http://blog.xuite.net/trully.hsiang/man/25582717

    PHP基本知識

    對於經常換語言的我,弄一份這種表格是很有必要的..

    1. 符號
    //單行註解
    /*...*/多行

    ':單引號,不對其中字串進行處理
    ":雙引號,對字串進行動態處理
    ex:
    $a=1;
    echo '$a \\'; ==>列印 $a \\
    echo "$a \\"; ==>列印 1 \
    . :連結符號
    $ :變數符號
    & :變數指標(加在變數前)(傳址)
    @ :不顯示錯誤訊息(加在函數前
    ->:物件的屬性或方法
    =>:陣列的元素值
    ?: :三元運算子

    escape:
    \" = 雙引號
    \\ = 反斜線
    \n = 換行
    \r =送出
    \t = 跳位TAB

    2. 流程
    if:
    if($a>$b){
    echo '1';
    } elseif {
    echo '2';
    } else {
    echo '3'; }

    while1:
    while ($a<$b){
    echo '1'; }

    while2: (應該會被廢
    while($i <10):
    echo '2';
    endwhile;

    do..while:
    do {
    ...
    if (..){
    break;
    }
    } while (....);

    for: for也可以像while使用冒號(用endfor結束)
    for1:
    for ($i=1,$i<=10, $i++){
    ...
    if (..) {break;} //可用break跳出for循環
    }
    for2: //
    for ($i = 1; $i <= 10; print $i, $i++);

    資料庫連線方式說明
    http://dyna.hcc.edu.tw/php/class4_4.htm
    重點:
    example_table(sn, name)

    $link=mysql_connect($server,$userName,$userPassword);
    mysql_select_db($dbNAME)or die("無法選擇std資料庫");
    $sqlResult=mysql_fetch_array(mysql_query($sqlQuery))or die("錯誤查詢 Query ERROR"); //result type有三種,mysql_assoc:index使用text;mysql_num: index使用num;mysql_both(預設);
    while($sqlResult){
    echo $sqlResult["sn"],$sqlResult["name"];
    }
    //insert
    $insertQuery = "insert example_table (sn, name) values("1","piceman");
    mysql_query($insertQuery) or die("新增錯誤");
    //update
    $updateQuery = "update example_table set sn="2", name="Piceman" where sn='1'";
    mysql_query($updateQuery) or die("更新錯誤");
    //delete
    $deleteQuery = "delete from example_table where id='1'";
    mysql_query($deleteQuery) or die ("無法刪除");

    mysql_close($link);

    其他函數
    mysql_num_rows, mysql_fetch_row (不建議使用), mysql_data_seek , mysql_insert_id ,mysql_free_result ,mysql_error

    PHP字串處理技巧

    今天處理了一些字串問題
    如果要替換的字串是英文,可以使用stripos判斷欲替換字串是否在開頭,是的話就用ucfirst給予大寫
    搜尋字串時,比較好的作法是用正規表示式,關鍵字preg,P是PCRE的意思
    其實mysql也有類似函式,不過兩者所用的delimiter不太一樣,這點要注意

    簡略的PHP字串處理函式,引自http://mail.ttes.tcc.edu.tw/~shiuann/myblog/read.php?20
    [code]trim();:去頭尾空白。
    ltrim();:去頭部空白。
    chop();:去尾部空白。
    nl2br();將”\n”換行改成

    print();同作用同echo,但print是函式,傳回布林值。
    printf();格式化字串,傳回整數。
    sprintf();格式化字串。 [separator]
    轉換規格%[顯示寬度][-][][.小數位數]型別:有-代表向左靠齊,沒-代表向右。
    %b:將變數解釋為整數,並以二進位顯示。
    %c:將變數解釋為整數,並以字元顯示。
    %d:將變數解釋為整數,並以十進位顯示。
    %f:將變數解釋為浮點數,並以浮點數顯示。
    %o:將變數解釋為整數,並以八進位顯示。
    %s:將變數解釋為字串,並以字串顯示。
    %x:將變數解釋為整數,並以十六進位顯示,用a-f。
    %X:將變數解釋為整數,並以十六進位顯示,用A-F。
    AddSlashes();若有反斜時,加上Slash,讓輸入字串若含特殊字元時,加上逸出字元\,以免存入資料庫時衝碼。Q3上引數為變數時,做完此運算立刻存回此變數,導致變數值改變;較新的版本,引數為變數時,做完此運算不會導致變數值改變。
    StripSlashes();若有反斜時,去掉Slash,使資料庫取出資料還原。Q3上引數為變數時,做完此運算立刻存回此變數,導致變數值改變;較新的版本,引數為變數時,做完此運算不會導致變數值改變。
    strtoupper();轉大寫。
    strtolower();轉小寫。
    ucfirst();字串首轉大寫。
    ucwords();字串中每個Word的字首轉大寫。
    strtok(字串,”分隔字元”);:擷取字串的前面到分字元為止。
    substr(字串,開始字元,長度);:擷取子字串,第一字元算0;開始字元為負,為字串尾減該數,即字尾算1倒數該數之字元。長度省略則取到字尾;長度為負則取到字尾倒數該數之字元。
    strcmp(字串一,字串二);:比較兩字串,相等為0,正為字串一ASC碼大,負數為字串二ASC碼大。
    strcasecmp(字串一,字串二);:同上,但不分大小寫。
    strlen();:字串長度。
    strstr(字串,欲找之子字串);:找到傳回子字串「第一次」出現以後之剩餘字串,找不到傳回「假」。
    strchr(字串,欲找之子字串);:同上。
    stristr(字串,欲找之子字串);:同上,但不分大小寫。
    strrchr(字串,欲找之子字串);:找到傳回子字串「最後一次」出現以後之剩餘字串,找不到傳回「假」。
    strpos(字串,欲找之子字串,指定蒐尋之起始位置);:找到傳回子字串「第一次」出現的位置,找不到傳回「假」。字串首位置算0,省略蒐尋起點時,從字串首開始找。但是「假」傳回值是0,字首位置傳回值也是0,會混淆。可以用if(傳回值===fasle)測,如果成立傳回值代表「假」,如果不成立傳回值代表位置0。
    strrpos(字串,欲找之子字串,指定蒐尋之起始位置);:找到傳回「子字串字首字元」「最後一次」出現的位置,找不到傳回「假」。字串首位置算0,省略蒐尋起點時,從字串首開始找。
    str_replace(蒐尋字串,代換字串,字串堆);:在字串堆中找到「蒐尋字串」並用「代換字串」換掉它們。
    substr_replace(字串堆,代換字串,起點,長度);:在字串堆指定的起點及長度,用代換字串換掉它們。起點為0或正,由字串堆頭起算;起點為負,由字串堆尾起算。長度未指定,則換到字串堆尾;長度為0,則插入原字串;長度為正,則取代幾個字串數;長度為負,則自尾端開如取代,停於長度。 [/code]

    首字大寫作法

    PS:如果是大寫字,以下招數很可能無效,記得先轉小寫再來處理
    PHP:
    //每行的首字大寫
    使用ucfirst(str);
    //每個字首大寫
    ucwords(str);

    javascript: 沒有簡單的函式可運用,要搭配regular expression才行
    //每行首字大寫
    str.substring(0,1).strToUpper.toUpperCase + str.substring(1)

    //每個字首大寫
    var str="xi nan shi you xue yuan china people"
    alert(str.replace(/\s[a-z]/g,function($1){return $1.toLocaleUpperCase()}).replace(/^[a-z]/,function($1){return $1.toLocaleUpperCase()}))

    CSS:
    這招最酷,也是我寫這篇的主因 XD
    透過CSS的 selector first-letter和大小寫樣式就可以用
    先說selector
    Selector : first-letter { sRules }

    p a:first-letter { color: green }
    div:first-letter { color:red;font-size:16px;float:left; }

    大小寫樣式: TEXT-TRANSFORM (引自http://chinese-school.netfirms.com/csst7.htm)
    功能 : 設定文字改變 ( 可設無、第一個字母大寫、大寫、小寫 )
    語法 : { TEXT-TRANSFORM : NONE︱CAPITALIZE︱UPPERCASE︱LOWERCASE }
    範例 : {TEXT-TRANSFORM:CAPITALIZE}
    設定英文字母大小寫顯示法。可用值有none(不自動轉換)、capitalize(第一個字母自動轉為大寫)、uppercase(全部自動轉換為大寫)、lowercase(全部自動轉換為小寫)。如text-transform:lowercase,則全部英文字都會自動轉為小寫。

    搭配: #id (text-transform:capitalize;}

    2010年8月19日 星期四

    crystal report 載入報表錯誤

    昨天碰到一個問題,某支程式在列印報表時發生了載入報表錯誤問題
    可是程式裡面的try catch竟然沒有撈到exception!?
    查了一下,最常見的兩個答案是Server.MapPath和PrintJobLimit
    由於我這邊的程式是winform,所以排除第一個答案
    第二個答案和registry中的HKEY_LOCAL_MACHINE->SOFTWARE->Crystal Decisions->10.2->Report ApplicationServer->Server>PrintJobLimit設定有關
    預設75,測試時可以設為2才方便測試

    如果測試後真的是這問題
    解決法是在有引用crystal report元件的程式關閉時
    確實的將該元件close及dispose
    大致如下
    class printReport {
    private reportWithCrystal _report;

    public printReport (){


    private void printReport _FormClosing(object sender, FormClosingEventArgs e)
    {
    _report.Close();
    _report.Dispose();
    }
    }