2008年12月25日 星期四

在GridView,每筆資料的CheckBox只能單選的用法

樣式:





程式設定:
protected void gv_major_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//當勾選「完成」,就對「未完成」進行checked=false;
ckb_finish.Attributes["onclick"] = string.Format(@"uncheck('{0}');", ckb_nofinish.ClientID);
ckb_nofinish.Attributes["onclick"] = string.Format(@"uncheck('{0}');", ckb_finish.ClientID);
}
}
javascript
function uncheck(id)
{
var obj = document.getElementById(id);
obj.checked = false;
}
感謝Lillian指導

2008年12月1日 星期一

DataSet讀取XML字串

DataSet dataSet = new DataSet();
System.IO.StringReader reader = new System.IO.StringReader(xml格式字串);
dataSet.ReadXml(reader);




參考來源:http://blog.csdn.net/daniao2003/archive/2007/08/04/1725857.aspx

2008年11月23日 星期日

用charindex來過濾欄位資料是串聯格式

語法
CHARINDEX ( expression1 ,expression2 [ , start_location ] )

EX:
欄位資料是123,2222

select * from Table Where (CHARINDEX(對象Field,資料來源)=0)

註:
=0:不存在於資料來源中,像 not in
>0:存在於資料來源中,像 in

2008年11月19日 星期三

SQL 數字 三位一撇

一般來說,如果在GridView要顯示三位一撇,只要設定就可以達到
參考:http://paladinprogram.blogspot.com/2008/07/gridview.html

或者在程式中,可以用 string.Format("{0:#,##0}",數值) 就可以達成(一定要轉成數值喔

若希望在SQL所產生的資料就有三位一撇的效果,可以參考
http://blog.blueshop.com.tw/soway/archive/2008/01/08/53987.aspx

2008年11月18日 星期二

2008年10月9日 星期四

開啟子頁時,要有bar~~~~~

window.open(url,winTitle,option)

option的內容加「scrollbars=yes」

2008年10月2日 星期四

在cs中,導到別頁時,以另開新頁的方式開啟

直接導到別頁的方式:Response.Redirect("網址");

以另開新頁的導頁方式:
public static void OpenWindowToNewPage(Page page, string destUrl)
{
//開一新視窗
string scriptString = string.Format("< language="'JavaScript'">window.open(\"{0}\",'NewPage');<", destUrl);
scriptString += "/";
scriptString += "script >";
Type cstype = page.GetType();
if (!page.ClientScript.IsStartupScriptRegistered("Startup"))
{
page.ClientScript.RegisterStartupScript(cstype, "Startup", scriptString);
}
}
使用方式: OpenWindowToNewPage(this.Page, "網址");


感謝Darren提供

在cs中直接呼叫javascript,不用在click事件

aspx
function Open()
{
var question="";
var question = confirm("Message?")
if (question)
{
window.open("http://","","width=600,height=400,toolbar=0,status=0,menubar=0,resize=0");
//開啟視窗
//window.open("http://");整個視窗
}
}

cs
string script = "< language="'javascript'">Open()< /script>";
ClientScript.RegisterStartupScript(this.GetType(), "n1", script);

立即取得CheckBoxList目前勾選的選項

一般都是用foreach來取得勾選了哪些選項,但如有筆數限定時,要馬上告知user已超出可勾選的筆數,此方式就不適用了!

可改用:

SelectedIndexChanged事件
string args = Request["__EVENTTARGET"];
char[] delimiterChars = { '$' };
string[] words = args.Split(delimiterChars);
int ix = Convert.ToInt16(words[words.Length - 1]);

foreach (ListItem item in CheckBoxList.Items)
{
if (item.Selected)
{
if (!判斷目前所勾選的筆數)
CheckBoxList.Items[ix].Selected = false;
}
}


參考網址:http://phone.idv.tw/cs2/forums/thread/510.aspx

感謝協助我的人^^

2008年8月26日 星期二

與瀏覽器的「上一頁」及「下一頁」的功能設定

前言:做了一個查詢頁面,並且可以連結到其他頁面,而在其他頁面時想要返回查詢頁面時,如果直接設定網址,只是像開啟新的頁面,這樣就必須重新設定查詢條件,實在不方便的說.....

所以~JavaScript有提供一個功能,可如同瀏覽器的「上一頁」及「下一頁」的功能,這樣就不用重新設定查詢條件,還是原先的查詢結果吶

<上一頁>
< type="buttion" value=" Back " onclick="history.back()">

<下一頁>
< type="buttion" value=" Forward " onclick="history.forward()">


感謝Panda提供以及Polly的書

2008年8月1日 星期五

何謂是Interface?

看了一堆人家提供的網頁資訊,簡單一句話:
Interface(介面)主要在於協助Java可進行多重繼承的效果。(就是因為Java語言不像C++支援多重繼承)

以下內容(整理過的),就參考一下囉!
Interface(介面)
基礎說明
◆Java語言的介面和類別一樣都屬於參考資料型態。
◆是定義不同類別間的一致行為,也就是一些共同的方法,讓不直接相關的個體能與其他裝置或整個系統互動。
◆是物件的型別,所以介面也可以為陣列的基底型別,而形成異質集合。
◆介面和介面之間也可以有繼承的關係,而且可以有多重繼承的關係,使用"extends"關鍵字。
◆是在類別繼承架構中定義類別行為,內含常數和方法宣告,但是並沒有實作程式碼。目的是制訂整組訊息接收器的規格,模擬類別的多重繼承。

注意事項
◆不可以有靜態常數的重複繼承。如果不同父介面中定義了同名的常數,則子介面型別的物件不可以使用該常數,以免發生曖昧不明的狀況。
◆介面的方法都只有宣告,而且一定沒有實作的程式碼。
◆介面內的方法皆為 public 和 abstract 方法。
◆介面內的屬性皆預設為public、static及final宣告,必須指定其值。當類別實作介面時,類別需要實作「所有」的介面方法。(實作子介面的類別必須將所有在父介面和子介面中所定義的方法實做出來。),故介面並不能隨便新增方法,如果新增介面的抽象方法,就需要新增所有實作此介面的類別方法;如果實作的介面不只一個,請使用「,」逗號分隔。

使用介面的時機
◆在無關的類別間取得相似性質,而不需人為地強制建立類別繼承關係。(只擷取不相關的類別間的相同點,不需要強迫之間有什麼特別關係 -如繼承)
◆宣告一或多個類別必須實作的方法。
◆展現物件的程式介面,而不展現其類別。

介面的程式碼
宣告介面
public interface 介面名稱 {
final 資料型態 常數=值;
……….
傳回值型態 介面方法( 參數列 );
……
}

介面繼承介面
public interface 介面名稱 extends 繼承的介面1,繼承的介面2 {
…… // 額外的常數和方法
}

實作介面
class 類別名稱 implements 介面名稱1, 介面名稱2 {
…//之前的code
// 實作的介面方法
}

範例:
public interface ShapeInterface {
public double getArea(double i, double j);
}
public class Circle extends Object implement ShapeInterface {
//計算圓形面積
public double getArea (double i, double j) {
return (i * i * j);
}
}
public class Rectangle extends Object implement ShapeInterface {
//計算方形面積
public double getArea (double i, double j) {
return (i * j);
}
}
public class Triangle extends Object implement ShapeInterface {
//計算三角形面積
public double getArea (double i, double j) {
return ( (i * j) / 2);
}
}

可再參考此網頁:http://www.study-area.org/coobila/tutorial_447.html


資料來源:各大網站的搜尋引擎

2008年7月24日 星期四

Cache的影響

前言:當你從page1點選出page2時,在page2編輯完後,回到page1時,這時page1有得到編輯後的資料,可是再點選出page2,會發現顯示的資料是編輯前的,而非編輯後的!

如果確定資料已有寫入,而是在重新執行page後就沒這個問題的話,那可能要考慮是不是cache原因

解決方法
1、如是masterpage
在head下加入一行:
< equiv="Pragma" content="no-cache">

2、如是純page,在開啟URL加上亂數加以預防Cache
例如: showModalDialog("a.aspx?rnd=" + Math.random(),window);

繼上一篇 SQL多欄位合併,網頁連結的作法

若希望每一項有各自的網頁連結,只需要串就行了

--將需要的資料儲存在#tmp_file
insert into #tmp_file(tmp_1, tmp_value, list)
SELECT ('< href="''xxxxxx''">'+field+'< / a >') field
FROM table
ORDER BY


使用此方法,在程式端的GridView,那個欄位要設定:HtmlEncode="false"
不然會被當成文字顯示,而非是url的效果!請注意



感謝Lillian的提供

2008年7月22日 星期二

SQL 多欄位合併成一個欄位的作法

declare @list nvarchar(max)
,@last bigint
set @list = ''
set @last = -1

-- 暫存所有查詢結果
create table #tmp_filelist(tmp_1 bigint, tmp_list nvarchar(max))

-- 暫存所有中間執行過程
create table #tmp_file(tmp_1 bigint,tmp_value nvarchar(60), list nvarchar(max))

--將需要的資料儲存在#tmp_file
insert into #tmp_file(tmp_1, tmp_value, list)
SELECT 資料來源
ORDER BY

--處理暫存表的list資料,利用@last來判斷是否要合併(重點:與前一筆資料作比對)
update #tmp_file set @list = list = (CASE WHEN @last <> tmp_1 THEN tmp_value ELSE @list + ',' + tmp_value END), @last =tmp_1

-- 將結果儲存在#tmp_filelist
insert into #tmp_filelist(tmp_1,tmp_list)
select tmp_1, max(list) from #tmp_file group by tmp_1

drop table #tmp_filelist
drop table #tmp_file


感謝Lillian的指導

2008年7月20日 星期日

2008年7月10日 星期四

SQL 語句格式化數字(前面補0)方式

將一個數字例如33,或1使用t-sql語句轉換成033或001
以下是詳細分析:
1、select power(10,3)得到1000
2、select cast(1000+33 as varchar) 將1000轉換類型
3、select right(100033,3) 從右邊取3個字符得到033
將1格式化同上
select right(cast(power(10,3) as varchar)+33,3)

資料來源:http://www.knowsky.com/399493.html

2008年6月29日 星期日

利用Menu及MultiView產生Tab效果

主要靠著「MutiView」分成多頁,以「MultiView1.ActiveViewIndex 」控制顯示哪一頁

參考網址:http://www.codeproject.com/KB/custom-controls/TabControl.aspx

容器的資料設定及狀態(GridView & Repeater)

GridView
protected void gvBBS_RowDataBound(object sender, GridViewRowEventArgs e) {
//定義一開始的網頁資料及狀態
if (e.Row.RowType == DataControlRowType.DataRow)
{
//使用版面內容
HyperLink hlkTitle = (HyperLink)e.Row.FindControl("hlkTitle");
if (hlkTitle != null)
hlkTitle.Text = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "bbs_title"));
hlkTitle.NavigateUrl = "BBSData.aspx?BBSNo=" + DataBinder.Eval(e.Row.DataItem, "bbs_bbsno");
}
}


Repeater
protected void rptBBS_ItemDataBound(object sender, RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item e.Item.ItemType == ListItemType.AlternatingItem)
{
Button btnDeleteTitle = (Button)e.Item.FindControl("btnDeleteTitle");
if (btnDeleteTitle != null)
DelBtnSetup(btnDeleteTitle, "Title");
int lblno = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "lbl_lblno"));
}
}

網頁切換變數設定及取值(網頁初學者)

設定(別再搞錯符號了)
string url="BBS.aspx?type=test";

取值
string type = Request.QueryString["type"] == null Request.QueryString["type"].ToString() == String.Empty ? String.Empty : Request.QueryString["type"].ToString();