星期一, 3月 31, 2008

Linq 執行時間

先看這段程式碼

List<string> str = new List<string> { "aa", "bb", "cc" };

//linq一下
var numStr = from s in str
select s;

//加入新的string
str.Add("dd");

//印出
foreach (string ss in numStr)
{
Response.Write(ss + ",");
}


各位猜猜..跑出來是 aa,bb,cc, 還是 aa,bb,cc,dd,

答案是
aa,bb,cc,dd,


結論
Linq是在執行的時候才執行(一﹍一||..這..唉優..你們懂得..XD)..所以以後debug時可以關心一下這有沒有出錯..

星期五, 3月 28, 2008

javascript端四捨五入

這是個老問題..^^||..一定大家都碰過..大家也都應該解決了ㄅ..(那我還的出來幹麼..XD)
今天我也是遇到同樣的問題..只是..我以前都是這樣解的..

http://www.logang.com/article.asp?id=62這裡教的..^^||..

function cheng(num,n)
{
var dd=1;
var tempnum;
for(i=0;i<n;i++)
{
dd*=10;
}
tempnum=num*dd;
tempnum=Math.round(tempnum);
alert(tempnum/dd);
}

今天..我研究了一下Microsoft ajax client framework..它也有解的方法ㄟ..而且很簡單..

var nu = new Number();
nu = 123456.654321;
nu.toFixed(2);

解決..收工..Thumbs-up

還有其他一些好用的函式..例如:
Number.format (format)

參考:
http://www.w3schools.com/jsref/jsref_tofixed.asp

MasterPage 遇到 clientID 的解決方法

當大家在用MasterPage時都有遇過很機車的問題..就是MasterPage會給妳亂加料..例如
id="Label1"就變成,id="ctl00_ContentPlaceHolder1_Label1"..這樣導致寫javascript時會
困擾抓不到id..網路上有解決的辦法..就是<% =TextBox1.ClientID%>把這寫在.aspx裡..
不過有時動態產生的control或是效能或是潔癖原因導致不能或是不想用這方法..所以自己就
很簡單的寫的一個class

public class masterPageHelp
{
//ContentPlaceHolder就你要處理clientId的地方
public void masterClientIdChange(MasterPage mr, string ContentPlaceHolder)
{
Page page = HttpContext.Current.CurrentHandler as Page;
Label lblTest = new Label();
lblTest.ID = "_";
mr.FindControl(ContentPlaceHolder).Controls.Add(lblTest);
page.ClientScript.RegisterStartupScript(GetType(), "msterpageClientChange", @"
function "
+ ContentPlaceHolder + @"(id)
{
return '"
+ lblTest.ClientID.Substring(0, lblTest.ClientID.Length - 1) + @"' + id;
}
"
, true);
}
}

上面原理就是把一個Label丟到ContentPlaceHolder裡..利用Label的去把MasterPage多加的
字串抓出來..之後在同一個ContentPlaceHolder的id就可以用這個javascript function去轉換..

用法:
在.cs的PageLoad裡加入就可以..然後在自己的javascript function裡就可以用

function test()
{
//ContentPlaceHolder就是妳放在哪個地方
var clientId = ContentPlaceHolder1(clientId);
document.getElementById(clientId).innerHtml = "test";
}

結論:
這只是我案子用到時的處理的方法..有需要的就拿去ㄅ..沒有很嚴謹的測試..有問題跟我說ㄟ..
一起討論一下^^

參考:
http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/12/21/1445.aspx
(上面黑暗大大也有解決方法..不過不知是不是我資質駑鈍..看不太懂..XD..)

星期三, 3月 26, 2008

同一個xap檔..多個silverlight page..

最近在學silverlight時..就發現一個問題..silverlight不是像asp.net不同頁面有不同的檔案..
在silverlight 2 beta裡..vs會把silverlight的project裡的xaml..References和Properties裡的東西
package成一個檔(.xap)在web ap的ClientBin裡..你一編譯就知道..

如果你用silverlight control時..你的Source就要指向ClientBin裡的xap檔..這樣就可以很簡單的看到silverlight的web ap..
問題是..如果要在不同頁面上顯示不同的silverlight..要怎麼辦..難道要在開一個silverlight project呢?..
當然不是啦..這麼笨的方法..沒人會接受的..所以google一下就可以找到相關的解決方法..

App.xaml.cs
private void Application_Startup(object sender, StartupEventArgs e)
{
// Load the main control
//this.RootVisual = new Page();

if (!e.InitParams.ContainsKey("page"))
{
throw new Exception("error");
}
else
{
switch (e.InitParams["page"])
{
case "startPage.aspx":
this.RootVisual = new startPage();
break;
case "endPage.aspx":
this.RootVisual = new endPage();
break;
}
}
}

startPage.aspx or endPage.aspx
<asp:Silverlight ID="Silverlight1" runat="server" Height="400px" Width="800px" Source="~/ClientBin/test.xap"
InitParameters="page=startPage.aspx">

當然startPage.xaml跟endPage.xaml也是要有這些檔案..
這樣就可以簡單的在不同頁面有不同的silverlight ap

ps:
InitParameters集合..這是一個鍵/值對集合..向它傳入初始化參數..可以像這樣丟
"Author=bibby,Url=http://bibby.be,Page=test.aspx"

參考:
http://quickstarts.asp.net/3-5-extensions/reference/silverlightref/P_System_Web_UI_SilverlightControls_Silverlight_InitParameters.aspx
http://silverlight.net/forums/t/10823.aspx
http://www.cnblogs.com/renji/archive/2008/03/07/sl2_InitParams.html

星期一, 3月 24, 2008

css ie6 hover fixed

一開始當然要先抱怨一下..ie6真是個ox的東西..Angry..
css裡的hover這元素理論上應該是大家都會常用到的東西..
可是ie6以下都不支援..案..沒禮貌..

所以..當然要google一下..把解決方案找出來..^^|||..這裡...
http://www.xs4all.nl/~peterned/csshover.html..
peterned大大把解決方案提出來..只要照他上面的方式去用..
就可以很輕鬆的解決啦..

如果看不懂英文或是要看重點..就這樣..
只要在body這taget加上

第一步:
先去下載htc檔
然後把他放在你的根目錄的某資料夾中

第二步:
然後在body標籤上加上
style='behavior:url("某資料/csshover2.htc")';

這樣就完成啦..Thumbs-up

最後..許願一下..希望大家把鳥鳥的ie6都丟掉好了..換個ie7也好..Vampire Bat

星期日, 3月 23, 2008

Lambda運算式

這是C# 3.0新增的功能..
剛剛試用了一下..發現蠻好用的..
簡單的來說就是delegate的直覺化方式

之前一般我們都是這樣用..

public partial class test_delegate : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

delegate int doFunction(int x, int y);
void Button1_Click(object sender, EventArgs e)
{
doFunction myAdd = new doFunction(new count().doAdd);
doFunction myMilus = new doFunction(new count().doMilus);
Response.Write(myAdd(1, 3));
Response.Write("<br />");
Response.Write(myMilus(1, 3));

}
}
class count
{
public int doAdd(int x, int y)
{
int result = x + y;
return result;
}
public int doMilus(int x, int y)
{
int result = x - y;
return result;
}
}

現在可以用樣用..

public partial class test_lambda : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

delegate int doFunction(int x, int y);
void Button1_Click(object sender, EventArgs e)
{
doFunction myAdd = (x, y) =>
{
int result = x + y;
return result;
};
doFunction myMilus = (x, y) =>
{
int result = x - y;
return result;
};

Response.Write(myAdd(1, 2));
Response.Write("<br />");
Response.Write(myMilus(1, 2));
}
}

再生級..

public partial class test_lambda : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
void Button1_Click(object sender, EventArgs e)
{
Func<int, int, int> myAdd = (x, y) =>
{
int result = x + y;
return result;
};
Func<int, int, int> myMilus = (x, y) =>
{
int result = x - y;
return result;
};

Response.Write(myAdd(1, 2));
Response.Write("<br />");
Response.Write(myMilus(1, 2));
}
}

你可以比較一下..這樣直覺簡單多啦~Open-mouthed..

星期六, 3月 22, 2008

3/20 Microsoft Seminar

這一天早上起得很早..7:00就起床了..
因為今天要去聽ASP.NET 3.5 完全升級攻略與快速上手的seminar..
這可以讓我自己縮短很多時間的去讀原文的sdk..XD..

坐了捷運..8:00準時到那.. 悠哉走在早上台北市的..其實感覺還真不錯..哈..

IMG0245A
地點....

9:40..準時開講..我也坐到一個不錯低位子..不會有人擋到我..
今天星期四..整間的會議室幾乎都做滿了..哇..還真捧場說...

第一場..(早上)
課程:ASP.NET 3.5 與 VS 2008 完全升級攻略..
講師: 奚江華
這場講的都是vs2008的新功能..
感覺新增的東西不多..可能以前都已經一點一點的放出來了..
不過新增的東西幾乎都跟這object-Relation Mapping這東西有關
這重點要去注意的..

第二場..(下午)
課程:ASP.NET 3.5 Extensions 快速上手
講師: 董大偉
這場重點就是在extention..把微軟之後要增加的功能..可能是4.0版本後的..蠻完整的介紹..
silverlight 2.0..ORM..linq..ado.net entity framework..MVC...
這幾個技術..我比較在意的就是silverlight 2.0跟ORM..
silverlight2.0聽老師說..10月份就會丟出正式版了..而且微軟現在有1000多個RD投入在這部份..
所以焦點..焦點...因該在這ㄅ..
ORM..這東西..在這整天的研討會中..幾乎都沒有離開這東西..一_一||..所以..要k..要k..
不過這場可能是下午ㄅ..大家都昏昏欲睡的..沒啥精神.. XD..

IMG0246A
這是中場休息的地方..

ps:
以這兩seminar來看..
董老師的言談比較幽默..比較平易近人..沒有架式和隔閡..
奚老師讓我感覺..就一板一眼..比較屬於專業派的架式..有點距離..^^||..
不過兩個老師都很厲害..這是真的..

星期五, 3月 21, 2008

DataTable.Compute()

今天遇到一些問題 就是要將datatable的cell加總起來..
可是有不想用迴圈去跑..一﹏一||..因為有點呆 找了一些文章..
看到這東西 DataTable.Compute()

我的用法就是

Double amount =Convert.Double(DataTable.Compute("Sum(aaa)",""));

就可以把datatable裡的一個column加起來了..^^..讚ㄟ 還有注意ㄟ..
datatable的column的型別要是int或是double等等..數字格式 ..

table.Columns.Add("win", typeof(System.Double));

星期二, 3月 11, 2008

專一..

專心一件事很難..有太多東西要去學了..有太多資訊要去吸收..
腳步亂了..沒有了節奏..一切都會亂..

靜下來..停下來..抓個方向..按圖施工..

繼續往前走..

1.時間 2.健康 3.運動

把持住..