星期四, 7月 23, 2009

div等其他tag做hover效果

透過<a 可以輕易的做到hover的效果
可是其他tag就不一定會有反應,不同的browser也可能有的會有hover效果,有的沒有
看破還是用onmouseover及onmouseout來做
比較麻煩的是要用this.style.*來做
動一下的感覺
onmouseover="this.style.padding='1px';"
onmouseout="this.style.padding='0px';"

//讓圖變透明
style="opacity:0.4;filter:alpha(opacity=80)"
onmouseover="this.style.opacity=1;this.filters.alpha.opacity=100;"
onmouseout="this.style.opacity=0.8;this.filters.alpha.opacity=80;"

星期二, 6月 23, 2009

特殊符號編碼

今天系統突然沒反應
看了才發現原來xml裡有特殊符號 造成xml判斷錯誤







< 小於&lt;
> 大於&gt;
& 和&amp;
' 單引號&apos;
" 雙引號 &quot;
斷行符號 &#13


特殊字符編碼大全 ... 自已google

透過C#寄發mail

1.直接寄發
透過System.Net.Mail,舊的System.Web.Mail不用了
reference
MailMessage 類別


2.呼叫outlook
需加入參考「 Microsoft Outlook 11.0 Object Library」
Outlook.ApplicationClass app = new Outlook.ApplicationClass();
Outlook.MailItemClass mi = (Outlook.MailItemClass)app.CreateItem(Outlook.OlItemType.olMailItem);
mi.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
mi.To = "yurenju@gmail.com";
mi.Display(new object());


references
C# 呼叫 Outlook

3.呼叫預設email程式
private void StartDefaultClient()
{
string filename = "mailto:jismenon@yahoo.com?subject=Hello&body=Hello&cc=meera@yahoo.com&bcc=jany@yahoo.com&Attach=@C:\\test.txt";
Process myProcess = new Process();
myProcess.StartInfo.FileName = filename;
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.RedirectStandardOutput = false;
myProcess.Start();
}

references
Opening default Email client from a C# Application


p.s 斷行問題
body裡有斷行時,要改用escape("\n") 或 %0A
否則會沒效果

星期三, 6月 03, 2009

將DataTable裡的Byte column存入access

string[] myPicArrayTitle = new string[] { "Pic1", "Pic2"};
foreach(string title in myPicArrayTitle )
{
string strSQL = string.Format("Update PicInfo Set {0}=@{0} Where PicSN={1}", title, PicSN);
accessAdapter.MdbAccessOLE(strSQL , title,(byte[])dt.Rows[0][title]);
}
public bool MdbAccessOLE(string strSQL,string ColName ,byte[] FileByteArray)
{
this.my_StrConnection = "Provider=Microsoft.JET.OLEDB.4.0;data source=" + this.my_TablePath;
OleDbConnection my_conn = new OleDbConnection(this.my_StrConnection);
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = my_conn;
cmd.CommandText = strSQL;
cmd.Parameters.Add("@"+ColName, System.Data.OleDb.OleDbType.Binary, FileByteArray.Length).Value = FileByteArray;

bool result = true;
try
{
cmd.Connection.Open();
cmd.ExecuteNonQuery();

}
catch (Exception ex)
{
result = false;
SharedAPI.Log_Error("MDB操作失敗, 錯誤訊息:" + ex.Message + " SQL:" + strSQL);
}
finally
{
cmd.Connection.Close();
}
return result;
}

星期一, 5月 04, 2009

開啟預設Browser

利用Process就可了

//直接執行,就是預設的browser
System.Diagnostics.Process.Start("http://www.google.com/");


要指定browser
//指定ie
System.Diagnostics.Process.Start("IExplore.exe", "http://www.google.com");

星期四, 4月 16, 2009

Word合併列印

Word 合併列印
太久沒用 有點忘了
跟Word 97好像不太一樣了
乙級軟應也是過去式啦...
Word 合併列印

同一頁套印兩筆不同的紀錄
初步的合併列印,在每新的一筆都是在新的一頁
如何在同一頁印兩筆不同的記錄咧
這時就插入<>變數即可完成
見以下範例

p.s 在<>變數之後 就會的變數 就會產生下一筆
因為要印第三筆,就貼2個<>變數
Word合併列印教學之二(同一頁套印兩筆不同的紀錄)

C# 列印 Word

列印文件
HOW TO:列印文件
若要列印整份文件
若要列印文件的目前頁面

這寫法還真特別
using Word = Microsoft.Office.Interop.Word;

合併列印

HOWTO:讓 Microsoft Word 由 Visual C# .NET 自動執行合併列印

jqGrid getRowData(id) 發生錯誤

不知為何就是錯了
後來查了一下
是因為利用$(x).load(xx);
把b網頁load進來,而該網頁已經有include jqury.js
把b網頁include jqury.js部份拿掉就ok了

星期二, 4月 14, 2009

Sql Database 加減日期時間

  1. Query裡下日期條件
    SELECT * FROM `Record`
    WHERE YEAR(`RecordDate`) = '2009'
    AND MONTH(`RecordDate`) = '9'
  2. 加減日期時間
    問:取出RecordDate欄位,並加上480分鐘(UTC TimeZone)
    MySQL
    //add 480 mins
    Select DATE_ADD(RecordDate ,INTERVAL 480 MINUTE) as RecordDate From ...
    //substract 30 days
    `UpdateTime` Between DATE_SUB(NOW() ,INTERVAL 30 DAY) And NOW()


    Access
    Select dateadd("n",480,RecordDate) as RecordDate From ...
Value Explanation
yyyy Year
q Quarter
m Month
y Day of the year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
Access: DateAdd Function

星期日, 4月 12, 2009

改變DataGridView的值或cell顏色

在設定DataSource後,改
dataGridView1.DataSource = DataTable;
foreach (DataGridViewRow dgv in dataGridView1.Rows)
{
row.DefaultCellStyle.BackColor = Color.Red; //改row的顏色
row.Cells["Col_AddUpdate"].Value = "新增"; //改內容值
}


但這樣改是無用的
因為必需在Bind Data的event後
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
//在這裡改才有用
foreach (DataGridViewRow dgv in dataGridView1.Rows)
{
row.DefaultCellStyle.BackColor = Color.Red; //改row的顏色
row.Cells["Col_AddUpdate"].Value = "新增"; //改內容值
}
}

星期一, 3月 30, 2009

jQuery 1.2.x 升級 1.3.x 需注意

1.Selector
取input標籤name為go的值
$("input[@name=go]").val(); //原本在 jQuery 1.2.x 上是可行的'
$("input[name=tag]").val(); //但1.3.x後要把@拿掉,不然會出錯

其他原本有加@都要去掉,像[@selected][@checked]等

p.s
[attribute]: 有指定的屬性
[attribute=value] :屬性值為value
[attribute!=value] :屬性值不含value
[attribute^=value] :屬性開頭字串為value
[attribute$=value] :屬性結尾字串為value
[attribute*=value] :屬性值包含value

remark: [attribute=value]與[attribute*=value]看起來很像,但還是有不同
一個是完全符合,一個是有包含,有看到有人寫後者是取多個,應該是不正確的

remark:
不知為何 用[name='test']時,如果全是span是ok的
但如果有個<a name=test>或input 就會只找到這一個

另外
$("XmlParentNode XmlChildNode[name='xx']").xx <==這樣用 好像會找錯
$("XmlParentNode").find("XmlChildNode[name='xx']").xx 才會找對


References:
3 Quick Steps for a Painless Upgrade to jQuery 1.3

星期六, 3月 28, 2009

jQuery取browser值

$(document).height();
$(window).height();

字面上看來window應是視窗的高,document是body的高
但測試後,window的高會比document小
太奇怪了
而且最大化視窗,兩個值還是一樣的...
要再研究


ps.如果是IFrame,值都會比較小

搞清楚clientHeight, offsetHeight and scrollHeight

透過jQuery取高(寬),有三個
1.height()
2.innerHeight() //不含border,padding
3.outerHeight() //包含border,padding及hidden elements

另外javascript本身取document.body有
  • clientHeight
  • offsetHeight
    offsetHeight是自身元素的高度
    *ie7不支援
  • scrollHeight
    scrollHeight是 自身元素的高度+隐藏元素的高度。

其實還是不太懂...

*DIV設Height:100% 沒反應
當在網頁裡多了以下的宣告
就會造成height的100%無效
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4>/strict.dtd">

查了一下
重點是因為body沒有height屬性,所以加入下面這行就可以啦

References
clientHeight、offsetHeight 和 scrollHeight
花点时间搞清top、postop、scrolltop、scrollHeight、offsetHeight

星期五, 3月 27, 2009

常用的正規表達示-統計

  • 統計字串中內某字元或字串出現次數
    /*
    * JavaScript 
    * 找出cloudchen有幾個c
    */
    var str =  "cloudchen"
    var find = "c";
    var reg = new RegExp(find,"g")
    var result = str.match(reg);
    var count = (result)?result.length:0;
    console.log('共:%d次',count);
    reference: JavaScript 統計字串中內某字元或字串出現次數
  • 統計字串中內某字元或字串出現次數
    去-,:,空白,由於"-"是保留字,所以在前面要加\
    //C#.Net
    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"[:|\-| ]");
    string datetime = "2009-01-02 03:04:05";
    datetime = reg.Replace(datetime, "");
    Console.WriteLine(datetime); //輸出20090102030405
    .Net的Regex位於System.Text.RegularExpressions之下

References:
Regular Expression (RegExp) in JavaScript 還可以直接測試
regular language 說明表格

星期四, 3月 26, 2009

如何做行銷計劃

1.動機:告訴別人 為何要做
  • 因為有新產品 (New Product)
  • 因為有新市場 (New Market)
  • 取代舊的Plan

2.分析
分析易有主、客觀認知,如非洲人不穿鞋
分析工具
  • SWOT分析
  • BGC,界定定位

3.製訂行銷策略
4P,6P(People,Procedure)

4.日程表/Budget
甘特圖

星期三, 3月 18, 2009

jQuery的BlockUI

可拖曳 - draggable
自己裝厲害,還自己載了jquery-ui
將blockui的div加上draggable
想想blockui怎麼可能沒有draggable功能
某天看blockui.js 發現了draggable:true;
才知道自己沒看注意demo就有教了
不過blockui的draggable也是依附在jquery-ui,自己載
$.blockUI({
 message: $("#mydiv"),
 draggable: true //加上這行囉
}


設定長寬高
$.blockUI({
 message: $("#mydiv"),
 css: {
 padding: 0,
 margin: 0,
 width: '30%',
 top: '30%',
 left: '25%',
 color: '#000',
 border: 'none',
 cursor: 'auto'
}

當blockUI裡的div或table有限定固定的width時
blockUI套件裡的外框已設定為30%
所以當畫面變大時,就有可能兩旁會有空白

這時就去blockui.js裡把這個拿掉就ok了
就有前幾行而已 很好找的
width: '30%',


錯誤
某些情況下 jQuery會發生錯誤

通常是在這一頁被轉頁後,又下了blockui的操作
錯誤發生在blockui.js裡的
function focus(back){
...
e.focus(); <===這裡...
}

看用catch抓住,再log起來吧...免得跳出錯誤訊息又要被老板唸了
function focus(back){
...
try {
e.focus();
}catch (ex) {
$.unblockUI(); //抓解開block...至少畫面還可以操作
}
}

星期一, 3月 16, 2009

jQuery的accordion 會亂閃亂跳動

利用accordion 完成選單後
click每個選項卻發現選項會跳動
看demo卻好好的
研究了一下 原來demo的html有這一句

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
...
</html>

星期五, 3月 13, 2009

JavaScript開檔 window.open 會跳ie視窗

一般用window.open("xxx.exe")即可
但都會先跳出個ie視窗 再問要不要下載、儲存
可利用ActiveXObject('WScript.Shell')就可以直接執行了
new ActiveXObject('WScript.Shell')).Run('test\\start.exe'); //執行位於test資料夾下的start.exe

完整的範例
< A href="javascript:(new ActiveXObject('WScript.Shell')).Run('test\\start.exe');void(0);"> click me < /a>


利用JavaScript轉址
之前有用過
window.href="http://xxx";
window.location.href="http://xxx";
不過有時都會沒反應
後來用
window.location = "http://xxx";
至少... 還沒問題..

星期四, 3月 12, 2009

如何讓光碟Autorun

autorun.ini
[autorun]
OPEN=xxxx.exe
ICON=yyyy.ico //光碟畫面的icon



如果是跑xxx.hta等,非win32應用程式
功能就像寫在.bat裡
[autorun]
shellexecute=Setup.hta

星期一, 3月 09, 2009

jqgrid 特殊技

設定
1.設定標題欄位高度
不知從那調,硬是拆html找出地方調
var tbTitle = $("#tbRecordList").parent().prev();
$(tbTitle).find("tr:first").find("div").css("height","18"); //12pt字型適用

2.硬將tbody的滑鼠改成"手指"
$("#tbRecordList tbody").css("cursor","pointer");

方法
1.排序

有兩種方法
1.$("#tablename").sortGrid('myname',true); //reload
//If the reload is set to true, the grid reloads with the current page and sortorder settings.
2.$("#tablename").setGridParam({sortname:'myname'}).trigger('reloadGrid');

2.隱藏欄位
使用者選擇
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:show_hide_columns

程式事先隱藏
jQuery("#tbRecordList").hideCol(["recordDate"]);



3.讓某欄位被選到
//setSelection(id,onsetselection) if true the event onSetRow is launched
jQuery("#tbRecordList").setSelection('1',true);


讓header text出現hint
目前還沒看到有什麼method可用
就先手動設定吧
jqgrid會利用建立時,所取的欄位名(name,不是index哦)
加上jqgh_來命名該header的span,如下
jQuery("#jqgh_test").attr("title", "This is title");