如 Dictionary的key 值是客製,從class而來
如要讓Dictionary裡的key不重覆,需覆寫GetHashCode()與Equals(object obj)
Dictionary.ContainsKey() 才會有效果
EX:
Dictionary<ErrorData, string> dicTemp = new Dictionary<ErrorData, string>();
ErrorData er=new ErrorData();
er.CUR="abc";
er.Name="Jake";
if (!dicTemp.ContainsKey(er))
dicTemp.Add(er,"good");
建立類別
public class ErrorData
{
public string CUR{ set; get; }
public string Name{ set; get; }
public override int GetHashCode()
{
//return base.GetHashCode();
return Name.GetHashCode() ^ CUR.GetHashCode();
}
public override bool Equals(object obj)
{
ErrorData v1 = obj as ErrorData;
return v1.PN == PN && v1.Currency == Currency;
}
}
參考資料:
http://www.cnblogs.com/pmars/archive/2012/03/02/2376610.html
2012年10月25日 星期四
2012年10月24日 星期三
{C#} enum 使用
//列舉排序的選項
public enum Rank:int
{
中文, 中文二, 中文三
}
列舉中各代表的數值(預設)
中文=0
中文二=1
中文三=2
//將一文字值轉為Enum
(Rank) Enum.Parse(typeof (Rank), Value);
//取得Enum的所有值
Enum.GetNames(typeof (Rank))
>>string[0] 中文 string[1] 中文二 string [2] 中文三
//宣告 rank變數為一個Enum Rank形態
Rank rank=Rank.中文;
switch ((int)rank)
{
case 0://中文
return finalResult.OrderBy(s => s.Code).ToList();
case 1://中文二
return finalResult.OrderBy(s => s.Sourer).ToList();
case 2://中文三
return finalResult.OrderByDescending(s => s.AllYearCurrencyRate).ToList();
}
參考資料:
http://www.dotblogs.com.tw/johnny/archive/2010/01/25/13300.aspx
http://diary.tw/tim/743
public enum Rank:int
{
中文, 中文二, 中文三
}
列舉中各代表的數值(預設)
中文=0
中文二=1
中文三=2
//將一文字值轉為Enum
(Rank) Enum.Parse(typeof (Rank), Value);
//取得Enum的所有值
Enum.GetNames(typeof (Rank))
>>string[0] 中文 string[1] 中文二 string [2] 中文三
//宣告 rank變數為一個Enum Rank形態
Rank rank=Rank.中文;
switch ((int)rank)
{
case 0://中文
return finalResult.OrderBy(s => s.Code).ToList();
case 1://中文二
return finalResult.OrderBy(s => s.Sourer).ToList();
case 2://中文三
return finalResult.OrderByDescending(s => s.AllYearCurrencyRate).ToList();
}
參考資料:
http://www.dotblogs.com.tw/johnny/archive/2010/01/25/13300.aspx
http://diary.tw/tim/743
2012年10月18日 星期四
{JQuery} Autocomplete 進階應用-text、value值不同(像DropdownList)
autocomplete.aspx :
$("#<%=Txt.ClientID %>").autocomplete('Datasource.aspx', {
noCache: true,
lineSeparator: ",",//設定基準為Datasource.aspx中紅色資料連接符號
//當資料被選擇時
onItemSelect: findValue,
onFindValue: findValue,
//擴充參數給Datasource.aspx
extraParams: {
MPSNo: function () {
return $('#<%=TxtVersionNo.ClientID%>').val();
}
}
});
function findValue(li) {
if (li == null) {
document.getElementById('<%=TxtItemName.ClientID %>').innerText = '';
document.getElementById('<%=TxtItemSpec.ClientID %>').innerText = '';
}
else {
document.getElementById('<%=TxtItemName.ClientID %>').innerText = li.extra[0];
document.getElementById('<%=TxtItemSpec.ClientID %>').innerText = li.extra[1];
}
}
{
var query = "";
var mpsNo = "";
if (!string.IsNullOrEmpty(Request.QueryString["q"]))
query = Request.QueryString["q"].ToUpper();
if (!string.IsNullOrEmpty(Request.QueryString["MPSNo"]))
mpsNo = Request.QueryString["MPSNo"];
var modelList = new PMOperator().ReadPNAuotcompleteDataSource(query, mpsNo).Take(10).ToArray();
var count = modelList.Count();
string[] str = new string[count];
for (int i = 0; i < count; i++)
{
if (i == count - 1)
str[i] = string.Format("{0}|{1}|{2}", modelList[i].PN, modelList[i].PNName, modelList[i].PNSpec);
else
{
str[i] = string.Format("{0}|{1}|{2},", modelList[i].PN, modelList[i].PNName, modelList[i].PNSpec);
}
}
Response.Write(string.Join(Environment.NewLine, str));
}
PS.
當使用extraParams屬性擴充參數時,autocomplete.js對下列的寫法,會產生問題
MPSNo: function () {
return $('#<%=TxtVersionNo.ClientID%>').val();
需將autocomplete.js檔中makeUrl(q) function 修改下段程式碼 (主要是紅字部分):
function makeUrl(q) {
var url = options.url + "?q=" + escape(q);
$.each(options.extraParams, function (key, param) {
url += "&" + key + "=" + (typeof param == "function" ? param() : param);
});
return url;
};
參考資料:
http://forums.asp.net/t/1830016.aspx/1
http://blog.darkthread.net/post-2009-07-10-jquery-autocomplete-sample.aspx
http://jsgears.com/viewthread.php?tid=114&extra=&page=1
API:
http://api.jqueryui.com/autocomplete/#entry-examples
$("#<%=Txt.ClientID %>").autocomplete('Datasource.aspx', {
noCache: true,
lineSeparator: ",",//設定基準為Datasource.aspx中紅色資料連接符號
//當資料被選擇時
onItemSelect: findValue,
onFindValue: findValue,
//擴充參數給Datasource.aspx
extraParams: {
MPSNo: function () {
return $('#<%=TxtVersionNo.ClientID%>').val();
}
}
});
function findValue(li) {
if (li == null) {
document.getElementById('<%=TxtItemName.ClientID %>').innerText = '';
document.getElementById('<%=TxtItemSpec.ClientID %>').innerText = '';
}
else {
document.getElementById('<%=TxtItemName.ClientID %>').innerText = li.extra[0];
document.getElementById('<%=TxtItemSpec.ClientID %>').innerText = li.extra[1];
}
}
Datasource.aspx:
protected void Page_Load(object sender, EventArgs e){
var query = "";
var mpsNo = "";
if (!string.IsNullOrEmpty(Request.QueryString["q"]))
query = Request.QueryString["q"].ToUpper();
if (!string.IsNullOrEmpty(Request.QueryString["MPSNo"]))
mpsNo = Request.QueryString["MPSNo"];
var modelList = new PMOperator().ReadPNAuotcompleteDataSource(query, mpsNo).Take(10).ToArray();
var count = modelList.Count();
string[] str = new string[count];
for (int i = 0; i < count; i++)
{
if (i == count - 1)
str[i] = string.Format("{0}|{1}|{2}", modelList[i].PN, modelList[i].PNName, modelList[i].PNSpec);
else
{
str[i] = string.Format("{0}|{1}|{2},", modelList[i].PN, modelList[i].PNName, modelList[i].PNSpec);
}
}
Response.Write(string.Join(Environment.NewLine, str));
}
PS.
當使用extraParams屬性擴充參數時,autocomplete.js對下列的寫法,會產生問題
MPSNo: function () {
return $('#<%=TxtVersionNo.ClientID%>').val();
需將autocomplete.js檔中makeUrl(q) function 修改下段程式碼 (主要是紅字部分):
function makeUrl(q) {
var url = options.url + "?q=" + escape(q);
$.each(options.extraParams, function (key, param) {
url += "&" + key + "=" + (typeof param == "function" ? param() : param);
});
return url;
};
參考資料:
http://forums.asp.net/t/1830016.aspx/1
http://blog.darkthread.net/post-2009-07-10-jquery-autocomplete-sample.aspx
http://jsgears.com/viewthread.php?tid=114&extra=&page=1
API:
http://api.jqueryui.com/autocomplete/#entry-examples
{Linq} 當取第一筆取不到時,預設值自訂
有時要去資料庫查某個條件下
是否有筆數,當有筆數要取第一筆
如筆數為零,則帶空值回來
可使用「.DefaultIfEmpty()」來設定
當值為空的時候要給什麼資料
service.functionName().Where(s=>s.Id==No).Select(s=>s.Name).DefaultIfEmpty('').First();
http://msdn.microsoft.com/zh-tw/library/bb340482.aspx
參考資料:
http://msdn.microsoft.com/zh-tw/library/bb340482.aspx
是否有筆數,當有筆數要取第一筆
如筆數為零,則帶空值回來
可使用「.DefaultIfEmpty()」來設定
當值為空的時候要給什麼資料
service.functionName().Where(s=>s.Id==No).Select(s=>s.Name).DefaultIfEmpty('').First();
FirstOrDefault()的預設值為NULL
故要使用 DefaultIfEmpty()輔助設定預設值,以避免回傳Null值msdn上寫到......
http://msdn.microsoft.com/zh-tw/library/bb340482.aspx
參考資料:
http://msdn.microsoft.com/zh-tw/library/bb340482.aspx
2012年10月5日 星期五
{JavaScript} html-select option Postback後指定選取
Html:
<select name="ddlNo" id="ddlNo" style="width: 10%">
<% var No= ViewState["No"] as List<string>;%>
<% if (No!= null) %>
<% { %>
<%= "<option value=''></option>"%>
<% foreach (var item in No)%>
<% { %>
<%= "<option value=" + item + ">" + item + "</option>"%>
<% } %>
<% } %>
</select>
C#:
//用一個Hidden將被選取的值記錄下來,以供PostBack後重新Load畫面給JS判斷用
string No = Request.Form["ddlNo"];
HiddenselectNo.Value = No ;
JS:
if ($('#<%=HiddenselectNo.ClientID%>').val() != '') {
var selectObj = $('#ddlNo')[0];
for (var i = 0; i < selectObj.length; i++) {
//當值相同時,則被選取,否則為False;預設是第一個是被選取
var selectObj = $('#ddlSupplierNo')[0];
for (var i = 0; i < selectObj.length; i++) {
if (selectObj[i].text == $('#<%=HiddenselectNo.ClientID%>').val())
selectObj[i].selected = true;
else
selectObj[i].selected = false;
}
參考資料:
http://www.xiaoxiaozi.com/2010/08/17/1856/
2012年10月2日 星期二
{C#} Code Behind、Code File、Code Inline
Code Behind--
建立Code Behind的.cs檔案,通常在建立asp.net的網頁會自動出現,也就是說「預設」就是Code Behind,做到code tag 分離,經過「三點式分離」「關注點分離」的洗禮,就覺的是一個三小的名詞,而code behind大概就是原始時代的分離法,而此頁面需要繼承Basepage ,而這個Basepage 也是相當的複雜,也延申程式碼會非常的多。
Code Inline--
而與他相匹的就是Code Inline(單一檔案)
Code Inline就是把程式碼寫在aspx檔案裡,就像回到了asp時代,但沒人說古時候就不好,這樣的程式簡潔有力。
Code File--
而在查Code Behind時,也查到另一個屬性,就是Code File,這個曾經取代Code Behind的屬性當初與Code Behind的差異就是將程式碼另寫在Code File 的.cs檔案中,並放置Server上呼叫到時才去編譯,而非Code Behind先編譯成dll 去運行。
現行的asp.net 3.5~4.5 以Code Behind為「預設」
Code Behind:將檔編譯成dll檔執行;asp.net 1.1版本
Code File:cs檔上傳到Server編譯;asp.net 2.0的版本
Code Inline:在aspx上
<script type="text/C#" runat="server">
protected void Page_Load(object sender,EventArgs e)
{
Response.Write("abc");
}
</script>
參考資料:
http://blog.miniasp.com/post/2008/12/23/ASPNET-Code-Behind-and-Code-Inline-Tips-in-Visual-Studio.aspx
http://blog.sanc.idv.tw/2011/07/codebehindcodefile.html
http://atic-tw.blogspot.tw/2012/05/code-inline.html
建立Code Behind的.cs檔案,通常在建立asp.net的網頁會自動出現,也就是說「預設」就是Code Behind,做到code tag 分離,經過
Code Inline--
而與他相匹的就是Code Inline(單一檔案)
Code Inline就是把程式碼寫在aspx檔案裡,就像回到了asp時代,但沒人說古時候就不好,這樣的程式簡潔有力。
Code File--
而在查Code Behind時,也查到另一個屬性,就是Code File,這個曾經取代Code Behind的屬性當初與Code Behind的差異就是將程式碼另寫在Code File 的.cs檔案中,並放置Server上呼叫到時才去編譯,而非Code Behind先編譯成dll 去運行。
現行的asp.net 3.5~4.5 以Code Behind為「預設」
Code Behind:將檔編譯成dll檔執行;asp.net 1.1版本
Code File:cs檔上傳到Server編譯;asp.net 2.0的版本
Code Inline:在aspx上
<script type="text/C#" runat="server">
protected void Page_Load(object sender,EventArgs e)
{
Response.Write("abc");
}
</script>
參考資料:
http://blog.miniasp.com/post/2008/12/23/ASPNET-Code-Behind-and-Code-Inline-Tips-in-Visual-Studio.aspx
http://blog.sanc.idv.tw/2011/07/codebehindcodefile.html
http://atic-tw.blogspot.tw/2012/05/code-inline.html
2012年10月1日 星期一
{工具}HightChart 圖表套件
圓餅圖實例:
xxx.cs >>
//資料來源
var newData =ReadResult;
//資料轉為Json
data = new JavaScriptSerializer().Serialize(newData.Data);
HiddenField1.Value=data;
//被統計項目
returnValue = new JavaScriptSerializer().Serialize(newData.Title);
xxx.aspx >>
<script type="text/javascript">
var chart;
$(document).ready(function () {
//解析資料來源
var dataArr=new Array();
if ($('#<%=HiddenField1.ClientID%>').val() != '') {
dataArr = JSON.parse($('#<%=HiddenField1.ClientID%>').val());
}
var categories = <%=returnValue %>;
var data=new Array();
for(i=0;i<dataArr.length;i++)
{
data.push({name:categories[i],y:dataArr[i]});
}
//開始畫圖
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
//圓餅圖表
defaultSeriesType:'pie'
},
title: {
text: 'High Chart'
},
xAxis: {
categories: <%=returnValue %>
},
tooltip: {
pointFormat: '{series.name}: <b>{point.percentage}%</b>',
percentageDecimals: 1
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
color: '#000000',
connectorColor: '#000000',
formatter: function() {
return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
}
}
}
},
series: [{ data: data}]
});
});
</script>
http://www.highcharts.com/demo/line-log-axis
相關範例∶
http://www.dotblogs.com.tw/lastsecret/archive/2011/01/30/21137.aspx
http://www.cnblogs.com/jsonzheng/archive/2011/05/13/2045344.html
長條圖:
http://www.cnblogs.com/jsonzheng/archive/2011/01/18/1938489.html
API:
http://api.highcharts.com/highcharts#title
xxx.cs >>
//資料來源
var newData =ReadResult;
//資料轉為Json
data = new JavaScriptSerializer().Serialize(newData.Data);
HiddenField1.Value=data;
//被統計項目
returnValue = new JavaScriptSerializer().Serialize(newData.Title);
xxx.aspx >>
<script type="text/javascript">
var chart;
$(document).ready(function () {
//解析資料來源
var dataArr=new Array();
if ($('#<%=HiddenField1.ClientID%>').val() != '') {
dataArr = JSON.parse($('#<%=HiddenField1.ClientID%>').val());
}
var categories = <%=returnValue %>;
var data=new Array();
for(i=0;i<dataArr.length;i++)
{
data.push({name:categories[i],y:dataArr[i]});
}
//開始畫圖
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
//圓餅圖表
defaultSeriesType:'pie'
},
title: {
text: 'High Chart'
},
xAxis: {
categories: <%=returnValue %>
},
tooltip: {
pointFormat: '{series.name}: <b>{point.percentage}%</b>',
percentageDecimals: 1
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
color: '#000000',
connectorColor: '#000000',
formatter: function() {
return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
}
}
}
},
series: [{ data: data}]
});
});
</script>
http://www.highcharts.com/demo/line-log-axis
相關範例∶
http://www.dotblogs.com.tw/lastsecret/archive/2011/01/30/21137.aspx
http://www.cnblogs.com/jsonzheng/archive/2011/05/13/2045344.html
長條圖:
http://www.cnblogs.com/jsonzheng/archive/2011/01/18/1938489.html
API:
http://api.highcharts.com/highcharts#title
{C#} ViewState 出現未將xx序列化問題
當將一集合傳給Viewstate資料來源時,
如是用自定義類別產成之集合,會出現類似下列的錯誤訊息
ViewState內的資料,只是傳化為畫面上隱藏欄位
<input type="hidden" value=".....">
故要將自定類別轉為序列化狀態
public void Page_Load()
{
var serializer = new JavaScriptSerializer();
var itemsResult = serializer.Deserialize<FormJSON>(FormDataSource.Value);
}
[Serializable]
public class FormJSON
{
public int FormId { set; get; }
public string Title { set; get; }
}
參考資料:
http://w3937.pixnet.net/blog/post/78687168-%5Basp.net%5D-%E5%88%A9%E7%94%A8viewstate%E4%BF%9D%E5%AD%98%E8%87%AA%E8%A8%82%E7%89%A9%E4%BB%B6
如是用自定義類別產成之集合,會出現類似下列的錯誤訊息
未將型別 'FormJSON' 標記為可序列化
ViewState內的資料,只是傳化為畫面上隱藏欄位
<input type="hidden" value=".....">
故要將自定類別轉為序列化狀態
public void Page_Load()
{
var serializer = new JavaScriptSerializer();
var itemsResult = serializer.Deserialize<FormJSON>(FormDataSource.Value);
}
[Serializable]
public class FormJSON
{
public int FormId { set; get; }
public string Title { set; get; }
}
參考資料:
http://w3937.pixnet.net/blog/post/78687168-%5Basp.net%5D-%E5%88%A9%E7%94%A8viewstate%E4%BF%9D%E5%AD%98%E8%87%AA%E8%A8%82%E7%89%A9%E4%BB%B6
{Note} Url的編碼
Url編碼:ASCII碼,如非ASCII字元,則會因瀏覽器支援的字元集不同而產成亂碼或其問題
詳細說明:
http://www.189works.com/article-42584-1.html
訂閱:
文章 (Atom)