Monthly Archives - 十二月 2016

Telerik教學-RadGrid的另類DataSource

其實Telerik的RadGrid讓我很喜歡用的原因是,它的DataSouce可以是一個Class,這相當方便在物件導向的使用上。

用法很簡單,先宣告一個Class,定義一些Private 變數,然後為這些變數建立一些Public Property,這就算在定義資料結構,如:

public class Columns{

Private int _Col1;
Private string _Col2;

public int Col1
{
get
{
return this._Col1;
}
set
{
this._Col1= value;
}
}

/*Col2一樣*/

}

然後這樣等同於有兩個Columns的Table的一個Row。接著就是做一個List<Columns> LC= new List<Columns>();的物件,這樣就等於可以有很多個Row的Table。

接著把資料填入LC,List物件是我最喜歡用的.NET物件,因為操作起來超級便利,速度又不會輸給Array太多。有時候排序只要一個list.Sort();就自動排好。

然後RadGrid1.DataSource=LC;RadGrid1.DataBind();

這樣等於是用一個List<T>的Class做DataSource,而可以額外寫一個Class是List<T>然後在那個Class裡面寫很多方法,這樣比起用DataTable更加的方便。

引用JavaScript外部檔案中文亂碼

今天在寫網站的時候遇到一個小問題,我把一些很長的JavaScript放到一個.js檔,外部引用它,如:

<script type=”text/javascript” src=”js/custom.js”></script>

結果原本沒問題的中文全部變成亂碼。

如果有人出現這個問題的話,解決方法就是在<script>tag裡增加它的編碼如Big5:

<script type=”text/javascript” src=”js/custom.js” charset=”big5″></script>

這樣亂碼的問題就解決了!

以後我盡量有些小問題就寫上來,也許可以幫到一些人。

C#教學-SqlDataAdapter及SqlCommandBuilder簡單用法

這篇主要要教怎樣用程式更改DataTable然後用讓SqlDataAdapter回存資料庫,這是很簡便的用法,我沒有要寫SqlDataAdapter的很多Command,只要寫一條Select Command其中包含Table的主索引就可以了。

首先一定是要定義一個SqlConnection:

SqlConnection connection = new SqlConnection(ConnectionString);

然後定義SqlDataAdapter、SqlCommandBuilder和DataTable:

SqlDataAdapter sda = new SqlDataAdapter(“select * from [a table] where blablabla“, connection);
DataTable dt=new DataTable();
SqlCommandBuilder scb = new SqlCommandBuilder(da);

這樣宣告完sda的另外三個command都會被自動產生,會產生的很不漂亮,但比手寫輕鬆,如果只是要做一點很簡單的批次性操作,這樣可以節省很多Coding時間。

最後要填入DataTable,然後操作,然後回存:

sda.Fill(dt);
/*Some operations*/
sda.Update(dt);

DataTable會去記錄哪個Row有修正,哪個Row是新增,哪個Row是刪除,所以直接呼叫一個Update,他就批次寫回資料庫,夠簡單吧!

最近年底,有幾個專案要結案,所以部落格的更新很慢,希望明年可以寫更多東西,謝謝觀看,下次再會!

 

C#教學-SqlConnection的Transaction功能

這篇要教C#怎樣使用SqlTransaction物件的方法,這在複雜一點的資料庫程式設計相當重要,C#也有一個物件能讓我們輕易的達到這樣的功能:

如果資料庫的操作不只一個SqlCommand,需要多個的時候,就有可能會發生其中一個錯誤,導致部分的有執行到,部分的沒執行到。這樣資料庫裡面的資料就會亂掉,有時會導致很嚴重的後果。

所以SqlTransaction的目的是在全部的SqlCommand都沒錯誤的執行完後,做一個Commit()動作全部送出,或在出錯的時候,做一個Rollback()的動作讓所有動作都沒發生。

基本上定義很簡單:

SqlConnection connection = new SqlConnection(ConnectionString);
SqlTransaction transaction;

然後要使用的時候:

connection.Open();
transaction = connection.BeginTransaction(“SampleTransaction”);

之後把每個要歸類到這個transaction的SqlCommand都設定:

SqlCommand cmd = new SqlCommand(“…”,connection);
cmd.Transaction = transaction;

這樣全部的SqlCommand執行完都沒發生錯誤,呼叫一個:

transaction.Commit();

有錯誤的話呼叫一個:

transaction.Rollback();

這樣就不會出現中途錯誤而只有部分影響資料庫的狀況,這我今天寫程式的時候突然遇到,因為偷懶沒寫transaction導致有一個Bug,所以特地發文上來。

程式設計範例-C#讀取RSS

這是最近客戶提到網站可能需要的功能,我在凌晨2~3點睡不著花了一小時做了一個範例。客戶的要求是讀取Pixnet的RSS。

說真的Pixnet的RSS的Content一解析出來,天啊!怎麼HTML碼這麼亂?我以為只有Word會產生這麼亂七八糟的HTML碼….

為了不要有什麼資訊安全的疑慮我直接把程式碼壓縮,裡面沒有編譯過的檔案。

寫得很簡單,只是單純運用SyndicationFeed這個物件,然後把讀取到的Feed用XmlReader存取。

只是要注意一下,直接調用SyndicationFeed的Content在Pixnet會是Null,所以多寫了一段代碼用StringBuilder讀取Content的部分。

不過因為Pixnet的Code太亂了,所以調用RSS的計畫就終止了,改用別的解決方案。

希望能幫到需要的人。

程式碼下載

 

程式設計與電腦應用相關部落格完成

這個部落格是我部落格網路裡面,分工是程式設計與電腦應用相關的部落格,裡面的內容也會盡量合乎主題。

我想這個部落格應該會很多跟我工作相關的文章,因為我主要職業是.NET程式設計師,所以如果有哪些程式設計相關的資訊我也會放上來,可能會因此幫助到一些人。

電腦軟體應用的部分,我可能會列出一些我覺得不錯的軟體,及它們的教學,我想應該也會幫助到有需要的人。

關於我的介紹請到About Me裡面,我就不在貼文裡面多寫,這是我部落格網路第四個完成的,總共預計要有五個站,之後還會有一個音樂、影集與電影相關的部落格。

全部完成後,會在右方新增一個區塊是我的部落格網路的全部連結,把五個站全部連結起來。

總之以後請多指教!