2008年9月30日 星期二

無法修改 Controls 集合,因為控制項包含程式碼區塊 (例如 <% ... %>)

今天遇到了這個錯誤訊息,不過很奇怪,之前都正常,只更新一下MasterPage之後就變成這樣,
所以我想應該是MasterPage的問題

上google去go一下,發覺中文的資訊不多,
不過大概可以知道 可能是程式裡面 有<%= ..... %> 這種寫法 然後又遇到
動態加入控制項 Controls.Add所導致的問題

後來我發現 MasterPage有下面這一段



之後我就把它改成

void Page_Load(object sender, EventArgs e)
{
HtmlGenericControl Hgc = new HtmlGenericControl("script");
Hgc.Attributes["src"] = Page.ResolveUrl("~/images/swfobject.JS");
Hgc.Attributes["type"] = "text/javascript";
header.Controls.Add(Hgc);
}

就沒有問題啦

參考網址 MSDNJude隨手寄事其他

2008年9月17日 星期三

Ajax下要匯出 Excel

基本上從GridView匯出EXCEL檔案不是一件多了不起的事
但是如果在Ajax環境下就會有點問題
因為最後要 Response.write
才可以把EXCEL匯出去

但是偏偏Ajax環境下卻不允許Response.write
會出現 Sys.WebForms.PageRequestManagerParserErrorException 這個錯誤訊息

該怎麼辦勒

可以參考這一篇

要輸出Excel那個按鈕設定成updatepanel中triggers的postbacktrigger就可以了

但是為什麼勒?? 我不知道說 呵呵

2008年9月3日 星期三

開發Crystal report 經驗談 (二)

雖然之前的方法可以解決我電腦上出現的問題,
不過在發佈出去後,似乎好像也是有諸多麻煩,
我希望可以是自動安裝的方式,由使用者安裝,
後來找到這篇文章,這是微軟的說明

裡面有個重點,就是我需要把下列說明加到web.config中

<configsections>
<sectiongroup name="businessObjects">
<sectiongroup name="crystalReports">
<section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
</sectiongroup>
</sectiongroup>
</configsections>
<businessobjects>
<crystalreports>
<printcontrol>
<add key="url" value="http://localhost/PrintControl.cab" />
</printcontrol>
</crystalreports>
</businessobjects>

不過紅字部分要特別注意一下,這是指定PrintControl.cab的路徑,

這個元件是下載自businessObjects的網站,當使用點選列印後,

若電腦沒有安裝Crystal Report的元件,網頁會彈跳出要求下載安裝的訊息,

不過這個前提是,列印方式要指定為ActiveX

CrystalReportViewer1.PrintMode = CrystalDecisions.Web.PrintMode.ActiveX;

還有需要把IE 中關於 ActiveX的限制打開,這樣才可以正確運作,終於大功告成啦,

這樣才是一個方便使用者操作的網頁





開發Crystal report 經驗談 (一)

最近因為案子需要建立報表,以前在BCB做過一次報表,那次是很不好的經驗,
搞了好久,最後才成功。問題是這次是WEB版的報表,沒用過其他報表軟體,
我只好使用VS2005的水晶報表,聽這名字感覺好像很讚, 水晶ㄟ 不過..........
又是一次不好的經驗,今天先不談開發經驗,先說一下發佈好了,

我將發佈完成的網站COPY到目的SERVER去,結果出現Error,勒這是什麼情形勒?
剛剛在我電腦就好好的,怎麼一下到了馬來西亞就......

ㄚ是怎樣ㄇㄟ 水土不服喔 我去馬來西亞八天 都很開心啊 也沒拉肚子啊

怎麼那麼遜勒 不管啦,先來看看是啥錯誤訊息吧

Server Error in '/' Application.--------------------------------------------------------------------------------Configuration ErrorDescription: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.Parser Error Message: Could not load file or assembly 'CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.

光看到Could not load file or assembly 'CrystalDecisions.Web
我大概就知道 是 那個水晶給我帶來的問題,不過翻了很久卻都找不到答案,
很多人說要把一些 crystal report 的 dll 檔給COPY到 BIN的目錄去就可以,
不過我覺得這樣的解決方式很怪,後來找很久才發現
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports在這個目錄下 有一個 CRRedist2005_x86.msi 的檔案
只要在目的機器裝上這個就可以了
真是夭壽勒 搞這啥東東 下次一定要記得

DataTable.Rows的刪除

DataTables.Rows.Removeat 和 DataTable.Rows.Delete 這兩個是有所差異的

Removeat 是立即刪除 而 Delete 卻是註記刪除而已
最後須等到 DataTable.AcceptChanges() 才完成刪除

但是刪除DataTable裡面的Row資料不表示資料庫內的紀錄被刪除掉
DataTable.Rows.RowState 來判斷是 新增、刪除、修改等...狀態來繼續後續的動作
下了Delete之後 無法用 DataRow["FiledName"] 存取欄位資料
它會顯示資料已被刪除的錯誤訊息 不過我覺得很好奇
下了Delete命令不是說註記刪除 但並非真的刪除嗎?
沒錯 所以我們可以透過 DataRow["FiledName",DataRowVersion.Original]
來存取資料 真是好玩 給大家分享囉~~

ActiveSync無法與PC端同步問題

最近購買了一款精業的PDA PA962回來準備大展身手一番
趕快把未完成的工作搞定 不然老闆老是在我背後虎視眈眈
都快變成我的背後靈了 好不容易充完電一插上USB 結果
出現

無法識別USB裝置可能是防火牆封鎖或是要我更新Activesync版本

怪了ㄟ 我電腦又沒有安裝防火牆 有的話也是你微軟自己的
我就搞了半天 把防火牆啟動又關閉 開防火牆的PORT查了網路上一堆解法
............ 還是無解不過其中一個方法算是還有用 就是要我去工作管理員把
rapimgr.exe 關閉後 再插入裝置一次 會出現錯誤訊息不理它 之後勉強可
以看見PDA裝置內容 可以複製資料到裡面

但是要透過 VS2005 執行debug模式會出現 RPC錯誤所以我只能徒法煉鋼
將程式複製到PDA裡面去執行真是雞肋的方法

可是把這台PDA接到其他台電腦卻又可以執行ActiveSync後來因為程式的問題
我更新手機中的 NetCF就是 .NET Compact Framework 2.0 Redistributable
ㄧ安裝完 神奇的事情發生了 小明車禍後斷掉雙腿 現在竟然可以爬起來了
無法同步的問題解決了 連帶無法執行Debug的問題也OK了
所以說 這問題到底出現在哪裡 答案很清楚啊 .......... 微軟自己

害我找這問題 找了好幾天 浪費一堆時間 提供大家參考吧

由於不支援指定的通訊協定,Windows Media Player 無法播放檔案


由於不支援指定的通訊協定,Windows Media Player 無法播放檔案


最近開啟Windows Media Player播放線上的影音,就會出現由於不支援指定的通訊協定,Windows Media Player 無法播放檔案。

請在 [開啟 URL] 對話方塊中,嘗試使用不同的傳輸通訊協定 (例如 "http:" 或 "rtsp:") 來開啟檔案。

可是很奇怪 選項裡面的通訊協定我全勾選了啊,怎麼還是有不支援的通訊協定勒,
唉 找了很多國內文章 幾乎都沒有解 後來我想還是找國外的吧

把錯誤訊息翻譯成英文 果然

Error message: "Windows Media Player cannot play the file because the specified protocol is not supported. If you typed a URL in the Open URL dialog box, try using a different transport protocol (for example, "http:" or "rtsp:")."

找到這個問題,其實這問題微軟本身已有解答 如連結前面說了一大堆廢話只有最後的才有用

If the above fixes don't work, you can rename the networking information folder for the Player so that it can rebuild its networking information files after you restart it.
To rename the Player networking information folder

1.Close Windows Media Player. (To do this, on the File menu, click Exit.)

2.Click Start, and then click Run.

3.In the Run dialog box, type the following (exactly as shown):%UserProfile%\Local Settings\Application Data\Microsoft\Windows MediaThis step opens the following folder on your computer:SystemDrive:\Documents and Settings\UserProfileName\Local Settings\Application Data\Microsoft\Windows Media

4.In this folder, rename the folder 10.0 to 10.0.bak. For more information about renaming folders, see To change the name of a file or folder.

5.Start the Player and try to stream the content again.

修改了名字之後,果然可以播放了ㄟ,終於可以聽線上廣播了 呵呵

如何讓CalendarExtender 顯示中文


把 ScriptManager 的屬性

【EnableScriptGlobalization】、【EnableScriptLocalization】

設為True 就會自動顯示中文啦

Eval 與 Bind 的 Data Binding 方式差別

ASP.NET 2.0 的Data-Binding 資料繫結語法表示符為「<% # %>」,
而裡面必須搭配Eval或Bind指令,也就是<%#Eval("變數名稱")%>
或者<%#Bind("變數名稱")%>,"變數名稱"則為資料來源欄位,而
Eval或Bind兩個方法是有差異的,以下是說明:

.Eval:Eval是用於單向資料繫結,資料是唯讀的顯示。
.Bind:Bind則是雙向的資料繫當,不但能讀取資料,更具有Insert、Update、Delete功能,所以若您需要編輯更新、新增與刪除功能使用本方法。

相對於ASP.NET 1.0舊語法DataBinder.Eval(Container.DataItem,"變數名稱")建議您在GridView、DetailsView及FormView應優先使用新的宣告語法。

asp.net 如何寄送郵件

using System.Net.Mail;

MailMessage NewMessage = new MailMessage();
NewMessage.From = new MailAddress(sFrom, "測試信件", System.Text.Encoding.UTF8);

// sFrom 為寄件者信箱
NewMessage.Priority = MailPriority.High;
// 可以指定此郵件的優先順序
NewMessage.IsBodyHtml = true;
// 是否啟用HTML格式
NewMessage.To.Add(new MailAddress(Recipient.Text));
// 指定收件者 但每個收件者需指定一次 十個收件者就需要十次

NewMessage.Body = tbMessageBody.Text; //信件內容
NewMessage.Subject = tbMailSubject.Text; //信件主旨
NewMessage.Attachments.Add(new Attachment(Server.MapPath(@"~\Report\Log.xls")));
// 加入附加檔案

SmtpClient MailServer = new SmtpClient(sSMTP);
// sSMTP 為外寄郵件伺服器位址

MailServer.Send(NewMessage);
// 寄出郵件