2015年7月5日 星期日

基本連接 Oracle資料庫


首先要在 web.config
  <connectionStrings>
    <add name="OracleDB" connectionString="Data Source=(DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.XX.XX.X)(PORT=1521))) (CONNECT_DATA=(SERVER = DEDICATED) (SERVICE_NAME = vhgp)));User Id=XXX;Password=XXX;" />
  </connectionStrings>

程式碼
 DataTable DT = new DataTable();
            string connectionString = ConfigurationManager.ConnectionStrings["OracleDB"].ConnectionString;
            using (OracleConnection conn = new OracleConnection(connectionString))//建立連線物件aaa, Data Source=IP/DB_NAME;User=XXXX;Password=XXXX
            {

                conn.Open();//開始連線
                string sCondition = string.Format(@"Select recno, symptoms
                                                        from nis_admin.BASNPSY
                                                        where NURSING_ISSUE = '5'
                                                        order by NURSING_ISSUE, sort
                                                        ");
                //建立od物件接收select結果
                OracleDataAdapter OD = new OracleDataAdapter(sCondition, conn);

                OD.Fill(DT);
                //指定datagridview的datasource

                conn.Close();//結束連線
            }
            return DT;

2015年6月27日 星期六

藍光人系列



藍光人四部曲(Eldran系列)

絕對無敵,元氣爆發,熱血最強,完全勝利

7年級的台灣人最熟的應該是前面那兩部吧

畢竟"熱血最強"

那時並沒有中文化引進台灣 當時網路資源也不豐富

而"完全勝利"

只有概念影片 直接腰斬的作品...




綜合觀後感:

我不是古X莫 今天要說"四"個

藍光人射後不理 把拯救世界丟給小孩子的故事...




絕對無敵-雷神王(1991)

15人後勤+3駕駛員

鳳王+劍王+獸王 組成的雷神王

擴充機體:爆龍王

影片:

https://www.youtube.com/watch?v=aCina-6VyKI&list=PLr5iO5LhmNhjgIT1GTlx1GY--5OGCcH4g&index=1




元氣爆發-合體將軍(1992)

3個人cosplay忍者 + 1個忍者cosplay狗  +

鷹+老虎+象 組成合體將軍

擴充機體:翔翼手龍+天神獅王




熱血最強(1993)

五隻恐龍的合體機器人

出擊影片:

https://www.youtube.com/watch?v=o7kNKsw5k2k




完全勝利(2000)

(鳳王?)+機器人(劍王?)+獅子(獸...風獅爺4ni)

擴充機體:中國龍 + 龜

概念影片

https://www.youtube.com/watch?v=e10a4B8evjA

2015年5月20日 星期三

DataTable

新開一個DT 去放值
DataTable dtLeave = readLeave(sBeginDateTime, sEndDateTime, sMedNo, sChinName, sLeaveReason, this.Page, AParams);
        DataTable dtOutPut = new DataTable();//重整dt
            dtOutPut.Columns.Add(new DataColumn("MedNo", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("ChinName", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("LeaveDateTime", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("LeaveReason", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("CreateName", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("CreateDateTime", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("HospNo", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("CaseSeq", typeof(string)));
            dtOutPut.Columns.Add(new DataColumn("LeaveSeq", typeof(string)));
            for (int i = 0; i < dtLeave.Rows.Count; i++)
            {
                DataRow row = dtOutPut.NewRow();
                row["MedNo"] = dtLeave.Rows[i]["MedNo"].ToString();
                row["ChinName"] = dtLeave.Rows[i]["ChinName"].ToString();
                row["LeaveDateTime"] = HISDateTime.ReportDateTime(HISDateTime.DateTimeString(dtLeave.Rows[i]["BeginDateTime"].ToString())) + "~" + HISDateTime.ReportDateTime(HISDateTime.DateTimeString(dtLeave.Rows[i]["EndDateTime"].ToString()));//更改日期格式
                row["LeaveReason"] = dtLeave.Rows[i]["LeaveReason"].ToString();
                row["CreateName"] = dtLeave.Rows[i]["CreateName"].ToString();
                row["CreateDateTime"] = HISDateTime.ReportDateTime(HISDateTime.DateTimeString(dtLeave.Rows[i]["CreateDateTime"].ToString()));//紀錄時間
                row["HospNo"] = dtLeave.Rows[i]["HospNo"].ToString();
                row["CaseSeq"] = dtLeave.Rows[i]["CaseSeq"].ToString();
                row["LeaveSeq"] = dtLeave.Rows[i]["LeaveSeq"].ToString();
                dtOutPut.Rows.Add(row);
            }

拿舊的增加
DataTable dtLeave = readLeave(sBeginDateTime, sEndDateTime, sMedNo, sChinName, sLeaveReason, this.Page, AParams);
dtLeave.Columns.Add(new DataColumn("LeaveDateTime", typeof(string)));
            for (int i = 0; i < dtLeave.Rows.Count; i++)
            {
                DataRow row = dtLeave.NewRow();
                dtLeave.Rows[i]["LeaveDateTime"] = HISDateTime.ReportDateTime(HISDateTime.DateTimeString(dtLeave.Rows[i]["BeginDateTime"].ToString())) + "~" + HISDateTime.ReportDateTime(HISDateTime.DateTimeString(dtLeave.Rows[i]["EndDateTime"].ToString()));//更改日期格式

            }

2015年5月19日 星期二

UpdatePanel 控制pancel 範例

    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> //必加

            <asp:DropDownList ID="ddlType" runat="server" OnSelectedIndexChanged="ddlType_SelectedIndexChanged" AutoPostBack="True">
                <asp:ListItem Value="1">test01</asp:ListItem>
                <asp:ListItem Value="2">test02</asp:ListItem>
                <asp:ListItem Value="3">test03</asp:ListItem>
            </asp:DropDownList>


            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                 <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="ddlType" EventName="SelectedIndexChanged" /> //這裡的設定要去 On
                </Triggers>
                <ContentTemplate>
                    <asp:Panel ID="Panel1" runat="server" Visible="False">
                        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                    </asp:Panel>
                    <asp:Panel ID="Panel2" runat="server" Visible="False">
                        <asp:Label ID="Label2" runat="server" Text="Labe2"></asp:Label>
                    </asp:Panel>
                    <asp:Panel ID="Panel3" runat="server" Visible="False">
                        <asp:Label ID="Label3" runat="server" Text="Labe3"></asp:Label>
                    </asp:Panel>
                </ContentTemplate>
             
            </asp:UpdatePanel>

        </div>
    </form>

.cs :

protected void ddlType_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (ddlType.SelectedValue)
            {
                case "1":
                    Panel1.Visible = true;
                    Panel2.Visible = false;
                    Panel3.Visible = false;
                    break;
                case "2":
                    Panel1.Visible = false;
                    Panel2.Visible = true;
                    Panel3.Visible = false;
                    break;
                case "3":
                    Panel1.Visible = false;
                    Panel2.Visible = false;
                    Panel3.Visible = true;
                    break;
                default:

                    break;
            }


        }

AJAX Control Toolkit - CascadingDropDown

前言  基本上AJAX Control Toolkit是根據ASP.NET的原件為基礎 開發的外掛物件 核心以TargetControlID作為連結
下面介紹的是CascadingDropDown這元件
.aspx :

<asp:DropDownList ID="ddlType" runat="server">
</asp:DropDownList> //
//主要介紹是下面這個 CascadingDropDown 如果沒這元件 可以去下載
AJAX Control Toolkit  :   http://ajaxcontroltoolkit.codeplex.com/  

               <cc1:CascadingDropDown ID="CascadingDropDown1" runat="server"
                Category="SystemID" Enabled="True" LoadingText="讀取中..."
                PromptText="請選擇系統類別" ServicePath="UCWebService1.asmx" //需要連結
                ServiceMethod="GetSysTemType"  //函式名稱  UseContextKey="True"
                TargetControlID="ddlType" //連到上面的ddl  />



接下來加入新項目
Web服務  附檔名是 .asmx 即是上面要連結的頁面

public CascadingDropDownNameValue[] GetSysTemType(string knownCategoryValues, string category)
        {
            List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();

            values.Add(new CascadingDropDownNameValue("test01", "1"));
            values.Add(new CascadingDropDownNameValue("test02", "2"));
            values.Add(new CascadingDropDownNameValue("test03", "3"));

            return values.ToArray();
        }

很重要的地方 上面有一行自行產生的

 // 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下列一行。
  //   [System.Web.Script.Services.ScriptService]
是的 要把註解拿掉 否則部會成功的








2015年5月17日 星期日

日期運算

//字串轉日期
DateTime startDate = DateTime.ParseExact( "20150518" , "yyyyMMdd", null);

//DateTime轉"數字" toString 的 d 去掉 就變成 英文
 string sTomorrowCircleValueW = dtTomorrowDate.DayOfWeek.ToString("d");//1 2 3 4 5 6 0(日)

//日期是該年第幾周
public int GetWeekOfYear(DateTime dt)
        {
            GregorianCalendar gc = new GregorianCalendar();
         
            return gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
 }

//兩日期之間共有幾周
public int week(DateTime start, DateTime end)
        {

            if (start > end) return -week(end, start);

            else
            {

                int count = 0;

                DateTime p = start;

                while (p < end)
                {

                    if (p.DayOfWeek == DayOfWeek.Sunday) count++;

                    p = p.AddDays(1);

                }

                return count;

            }

        }

C#分割字串

string x = 要分割字串.Substring(0,4) ;//從0開始取4碼

string[] x = 要分割字串.Split(',');//遇到逗號分割

2015年5月13日 星期三

開小視窗

母視窗開子視窗
window.open()


子視窗 呼叫 母視窗
opener.window.location.reload(); 重製母視窗

opener.window.function(); 呼叫母視窗 function

ASP開發ID變動

ASP元件 在建置成HTML的時候 id 都會增加點東西
所以有時候scritp 抓不到東西倒也不是下錯指令

但<div> <td>之類的元件 id 卻不會改變
所以最簡單的解決方法就是 用一層div去包他
再用find去找

 $('#divID').find("input").attr("value","test");

順帶一提 .click()
是找不到 onclick事件的 我是直接在ASP裡加上
click="btnSearch_Click" 跟 onclick相同事件 就可以解決了
但不知道這樣會有啥後遺症就是了

2015年5月12日 星期二

gv 抓值

1. 按鈕轉成 temTemplate
aspx:
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="false" CommandName="cancel" Text="作廢" OnClientClick="return confirm('是否確定刪除?');"></asp:LinkButton>
</ItemTemplate>
cs:
protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "cancel")
            {
                //int index = Convert.ToInt32(e.CommandArgument);
                LinkButton customersGridView = (LinkButton)e.CommandSource;
                GridViewRow row = (GridViewRow)customersGridView.NamingContainer;

                string sMedNo = Server.HtmlDecode(row.Cells[0].Text);
       
            }
        }

2.普通的
apsx:
<Columns>
<asp:ButtonField CommandName="cancel" Text="作廢" />
</Columns>

cs:
  protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "cancel")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridView customersGridView = (GridView)e.CommandSource;
                GridViewRow row = customersGridView.Rows[index];

                string sHospNo = Server.HtmlDecode(row.Cells[0].Text);

            }
        }

-----------------------------------------------------------------------------------------------------
如果要抓 沒顯示在GV上的值
其中一種簡單的辦法就是 一樣把值帶入GV但隱藏起來
可是如果直接在裡面設定 則系統是不會產生code給你去抓的
所以與RowCreated時設定

protected void gv_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header || e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[9].Visible = false;//隱藏欄位  (數字要自己算 從0開始)
                e.Row.Cells[10].Visible = false;
                e.Row.Cells[11].Visible = false;
            }
}

2015年5月11日 星期一

SQL語法 IF

SELECT
CASE DateType
WHEN '1' THEN STR(SpaceCircle) + '月'
WHEN '2' THEN STR(SpaceCircle) + '周'
ELSE STR(SpaceCircle)
END 'New SpaceCircle'

from Table

SQL的IF是靠CASE來做邏輯的
case 是判斷條件
when 條件結果 then 要做的句子
else 則看你加不加
end 後加新欄位名稱


順帶一提 STR( ) 是 SQL轉字串的語法

2015年5月10日 星期日

錯誤訊息:必須宣告純量變數

錯誤訊息:必須宣告純量變數

結果是因為sql語句分開寫 在加再一起 中間少一個空格 系統把她整句黏在一起了

語句後面加個 空白 幫他們分開一下就解決了...

這只是其中一個可能性 貌似是新手常遇到的問題 紀錄一下吧

2015年4月6日 星期一

TF30063 授權

今天要簽入的時候
忽然跑出一段錯誤
TF30063: https://dfp-mobile.visualstudio.com/DefaultCollection的授權。

解決辦法:
把此路徑
C:\Users\userName\AppData\Local\Microsoft\Team Foundation\3.0\Cache
帳戶在本地的緩存刪除
稍微爬了一下文
會有這問題 似乎是帳戶權限不足
但問題是如果其他電腦用同帳號卻可以
那就只是單純的BUG  刪除上述路徑全部東西後 重開VS就沒問題了

2015年4月1日 星期三

jquery - trim功能

.trim() 強制去空白
$.trim(" hello, how are you? ");
run->
"hello, how are you?"



2015年2月24日 星期二

AJAX與WebServer與JSON

.aspx :

 var JsObj = {SaveData: daveAllData};
 var datastr = JSON.stringify(JsObj);

        $.ajax({
            async: false,
            type: "POST",
            url: "/WebServiceGetData.asmx/SaveAll",
            data: datastr,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (responseI) {
                console.log("ajax s in");
                alert("儲存成功");
                var x2 = JSON.parse(responseI.d);
                console.log(x2);
            },
            error: function (response) {
                console.log("fail s");
            }
        })

data 傳值 一定要JSON格式 所以要做上面兩行的轉換
第一行SaveData是自訂的 後面的daveAllData才是資料
第二行就是把它序列化嚕

webserver:

 [WebMethod]
        public string SaveAll(object SaveData)
        {
            var SData = JsonConvert.SerializeObject(SaveData);
            dynamic stuff = JsonConvert.DeserializeObject(SData);

            var x = stuff[0].fieldid;
            var y = stuff[0].fieldvalue;
            var x2 = stuff[1].fieldid;
            var y2 = stuff[1].fieldvalue;
            //----
            return x;
        }

接收的資料 也要做轉換 即可以把值讀出來


stuff  沒有length方法
要嘛
JArray stuff = (JArray)JsonConvert.DeserializeObject(SData);
stuff.Count 就是它的長度

不然就
foreach的方式
             var x = "";
            foreach (var item in stuff)
            {
                x += item.fieldid;
                x += item.fieldvalue;
            }
           


2015年2月15日 星期日

iframe 鑲嵌網頁

父:
<iframe src="./index.aspx" name="IIframe" scrolling="auto" width="100%"  marginwidth="0" marginheight="0" id="IIframe" scrolling="no"></iframe>
scrolling 是視窗右邊的上下bar條開或不開

子:
<head>    
<script>     
function resize()
{      
parent.document.getElementById("mainframe").height=document.body.scrollHeight; //傳長度回父視窗
}  
</script>
</head>

在body裡加入
<body onload="resize();" > 
即可

父:
$("#IIframe")[0].contentWindow.callme= "hello";
callme 是變數名稱 隨取
子:
alert(callme);


父呼叫子視窗的function
父:
$("#IIframe")[0].contentWindow.saveAll();
function saveAll(){

}

2015年2月11日 星期三

jQuery 抓值

抓某個資料 $("#divGvLeave").find("tr[style='background-color:Gray;']").each(function () { $(this).find("td").eq(6).html(""); });

//-----------------------------------
<a id="a123">
<span>原值</span>
</a>

jq 語法
$('a#a123 span').html('帶入');

就可用帶入 取代 原值 了

jq語法 只要下對 基本上沒有抓不到的東西
ex:
$("select[id*='id123'] option[value='value123']").attr('selected', 'true');
把id叫id123 的select物件 且裡面option 的 value = value123的值的該選項 變成預設

id*='id123'
*字號是指 不管前後還有沒有 只要有該字串就可

id$='id123'
$必定要以 id123結尾

id^='id123'
^必定要以 id123開頭
-------------------------------------------------------

取checkbox的select的值(選項本身有id 的情況)

CBItem 用來放打勾的選項的value
$('input[id*="'id"]:checked').each(function () { CBItem += $(this).val()+"," });
CBItem = CBItem.substring(0, CBItem.length - 1); //去掉最後一個 逗點


//--------------------
修改div style的方法
$('#PrintMenu').css({ left: document.body.scrollWidth*0.92 });

document.body.scrollWidth 是整個畫面的寬

2015年2月4日 星期三

append 物件 jquery mobile 失效問題

為順序問題 所以只要jQueryMobile再重新觸發一次就好

尾巴加上 .trigger('create')就可以解決了

$('ID').append('<label for=id>這是一個label</label>').trigger('create');

jQ就是那麼簡單~

 

2015年2月2日 星期一

Oracle tnsnames ora 設定

tnsnames ora 設定字串弄好卻還是看不到的問題
於是我們要去系統設定環境變數 告訴它位置


變數名稱:NLS_LANG
值:TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5 

新增
變數名稱:TNS_ADMIN 
值: 到tnsnames ora的路徑如下圖
(ex:D:\app\DannyLo\product\11.2.0\client_1\Network\Admin\Sample)


即可!!~

--------------------------------------------------------
之後可能還會遇到 中文亂碼的問題


於此位子添加變數
  • 變數名稱: NLS_LANG
  • 變數值: TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950
即可解決


2015年1月19日 星期一

UserControl

在UserControl資料夾內加入一個 web使用者控制項 UCTextBox.ascx

召喚方式
UCTextBox c = (UCTextBox)LoadControl(@"UserControl/UCTextBox.ascx");

丟到視窗
this.PanelView.Controls.Add(c);