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語句分開寫 在加再一起 中間少一個空格 系統把她整句黏在一起了

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

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