~relax~
這是一個悠閒放鬆的部落格,請用輕鬆的心情閱讀文章,在忙碌工作之餘療癒自己的身心。 (最近發現我的文章被複製轉貼且沒有註明出處,本部落格的文章皆為原創,若有引用參考也會註明,如有需求請留言告知,謝謝!)

目前分類:C#/VB/ASP.NET (46)

瀏覽方式: 標題列表 簡短摘要
使用Button的Command,CommandArgument來實現。

.aspx
實作3個Button Object,
OnCommand呼叫同一個Function,
CommandArgument設定參數,此處設定Object名稱。

<asp:Button ID="Button1" runat="server" Text="Button1" 
CommandArgument="Calendar1" OnCommand="ButtonCommand" />

<asp:Button ID="Button2" runat="server" Text="Button2" 
CommandArgument="Calendar2" OnCommand="ButtonCommand" />

<asp:Button ID="Button3" runat="server" Text="Button3" 
CommandArgument="Calendar3" OnCommand="ButtonCommand" />


.vb
使用FindControl取得Object。
按各別按鈕會顯示/隱藏指定的日曆元件。

Public Sub ButtonCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
    Dim c As Calendar = FindControl(e.CommandArgument)
    c.Visible = Not c.Visible
End Sub


伊 發表在 痞客邦 留言(0) 人氣()

1. 一般頁面 Dim tb as TextBox = FindControl("TextBox1")

2. 有MasterPage的頁面 Dim tb as TextBox = Master.FindControl("Content").FindControl("TextBox1")


伊 發表在 痞客邦 留言(0) 人氣()

以前在寫C語言的時候,常常使用到傳值呼叫/傳址呼叫,用的很理所當然~
但是當我看了JAVA的教學文章後,突然發現,怎麼沒有傳值呼叫/傳址呼叫呢?
雖然不常用,但是,想用卻沒得用~可是會很困擾呢!

JAVA已經預設了參數的傳遞方式:

伊 發表在 痞客邦 留言(1) 人氣()

還記得第一次使用VB.NET寫陣列時,發生了一件令我百思不解的問題,就是當我將某一變數指定某一物件後,使用該變數更改內容,原本物件的內容也會被一併更改...

【使用陣列來舉例】

提一下陣列的宣告:
1. int[] arr; 沒指定大小,沒指定初值。
2. int[] arr = new int[10]; 指定大小,沒指定初值。
3. int[] arr = {1,2,3,4,5}; 指定大小,指定初值。

伊 發表在 痞客邦 留言(0) 人氣()

public bool Mail_Send(string MailFrom, string[] MailTos,string[] Ccs, string MailSub, string MailBody, bool isBodyHtml,string[] filePaths)
{
    try
    {
        //防呆
        if (MailFrom == "")
        {
            MailFrom = "sysadmin@system.com.tw";
        }

        //命名空間: System.Web.Mail已過時,http://msdn.microsoft.com/zh-tw/library/system.web.mail.mailmessage(v=vs.80).aspx
        //建立MailMessage物件
        System.Net.Mail.MailMessage mms = new System.Net.Mail.MailMessage();
        //指定一位寄信人MailAddress
        mms.From = new MailAddress(MailFrom);
        //信件主旨
        mms.Subject = MailSub;
        //信件內容
        mms.Body = MailBody;
        //信件內容 是否採用Html格式
        mms.IsBodyHtml = isBodyHtml;

        if (MailTos !=null)//防呆
        {
            for (int i = 0; i < MailTos.Length; i++)
            {
                //加入信件的收信人(們)address
                if (!string.IsNullOrEmpty(MailTos[i].Trim()))
                {
                    mms.To.Add(new MailAddress(MailTos[i].Trim()));
                }
                
            }
        }//End if (MailTos !=null)//防呆

        if (Ccs!=null) //防呆
        {
            for (int i = 0; i < Ccs.Length; i++)
            {
                if (!string.IsNullOrEmpty(Ccs[i].Trim()))
                {
                    //加入信件的副本(們)address
                    mms.CC.Add(new MailAddress(Ccs[i].Trim()));
                }
               
            }
        }//End if (Ccs!=null) //防呆

        if (filePaths!=null)//防呆
        {//有夾帶檔案
            for (int i = 0; i < filePaths.Length; i++)
            {
                if (!string.IsNullOrEmpty(filePaths[i].Trim()))
                {
                    Attachment file = new Attachment(filePaths[i].Trim());
                    //加入信件的夾帶檔案
                    mms.Attachments.Add(file);
                }
               
            }
           
        }//End if (filePaths!=null)//防呆
      
        SmtpClient client = new SmtpClient("msa.hinet.net");//或公司、客戶的smtp_server
        //以下可以省略,因為寄信不用帳密(除非客戶特別要求)
        client.Credentials = new System.Net.NetworkCredential(WebConfigurationManager.AppSettings["SMTPsendusername"], WebConfigurationManager.AppSettings["SMTPsendpassword"]);

        client.Send(mms);//寄出一封信
        return true;//成功
      }
      catch
      {
        return false;
      }
}

//寄信人E-mail
string From_mail = "from_mail@hotmail.com";
//收信人E-mail
string[] to_emails = new string[] { @"to_email@hotmail.com", @"to_email2@hotmail.com" };
//副本
string[] to_cc = new string[] { @"to_email@hotmail.com", @"to_email2@hotmail.com" };
//主旨
string Subject = "我是主旨";
//內文
string htmlBody = TextBox1.Text.Trim().Replace(Environment.NewLine, "
");
//附檔在WebServer上的路徑
string[] filePaths = new string[] { @"D:\web\upload\xxx.xls", @"D:\web\upload\test.txt" };

//寄信
bool sendResult = Mail_Send(From_mail, to_emails, to_cc, Subject, htmlBody, true, filePaths);

文章標籤

伊 發表在 痞客邦 留言(0) 人氣()

 

※只能適用於GirdView的換頁,如果是轉跳到不同url的頁面,則[上一頁]的history功能一樣失效。
實驗的結果,轉跳不同url也可成功"回上一頁"。
但如果GridView有做ajax篩選,則一樣會失敗。
目前解決辦法是,不要做ajax篩選,只有ajax換頁。

文章標籤

伊 發表在 痞客邦 留言(0) 人氣()

public void DataTimeMath()
{
    if (drpHourStart.SelectedIndex == 0) drpMinuteStart.SelectedIndex = 1; //不可早於8點30,強制設定8點30為最早
    if (drpHourEnd.SelectedIndex == 0) drpMinuteEnd.SelectedIndex = 1; //不可早於8點30,強制設定8點30為最早
    if (txtDateStart.Text.Trim() == "") return; //沒有填寫日期不計算
    if (txtDateEnd.Text.Trim() == "") return; //沒有填寫日期不計算

    string strDate = "2000/01/01";
    string strDateStart = txtDateStart.Text; //使用者填入的日期
    string strDateEnd = txtDateEnd.Text; //使用者填入的日期
    string strTimeStart = drpHourStart.SelectedItem.Text + ":" + drpMinuteStart.SelectedItem.Text + ":00"; //使用者選擇的時間
    string strTimeEnd = drpHourEnd.SelectedItem.Text + ":" + drpMinuteEnd.SelectedItem.Text + ":00"; //使用者選擇的時間

    //上下班時間設定、午休時間設定
    TimeSpan 上班時間 = new TimeSpan(DateTime.Parse(strDate + " 08:30:00").Ticks);
    TimeSpan 下班時間 = new TimeSpan(DateTime.Parse(strDate + " 17:30:00").Ticks);
    TimeSpan 午休開始 = new TimeSpan(DateTime.Parse(strDate + " 12:00:00").Ticks);
    TimeSpan 午休結束 = new TimeSpan(DateTime.Parse(strDate + " 13:00:00").Ticks);

    TimeSpan t1 = new TimeSpan(DateTime.Parse(strDateStart + " " + strTimeStart).Ticks);
    TimeSpan t2 = new TimeSpan(DateTime.Parse(strDateEnd + " " + strTimeEnd).Ticks);
    double ts = t2.Subtract(t1).TotalHours;
    if (ts < 0) return; //起迄時間錯誤不計算

    TimeSpan date1 = new TimeSpan(DateTime.Parse(txtDateStart.Text).Ticks);
    TimeSpan date2 = new TimeSpan(DateTime.Parse(txtDateEnd.Text).Ticks);
    double dates = date2.Subtract(date1).TotalDays; //跨越天數

    double 請假時數 = 0;

    for (int i = 0; i <= dates; i++)
    {
        TimeSpan 請假開始 = new TimeSpan(DateTime.Parse(strDate + " " + strTimeStart).Ticks);
        Boolean 上午開始 = 午休開始.Subtract(請假開始).TotalHours >= 0 ? true : false;
        Boolean 下午開始 = 午休結束.Subtract(請假開始).TotalHours <= 0 ? true : false;
        TimeSpan 請假結束 = new TimeSpan(DateTime.Parse(strDate + " " + strTimeEnd).Ticks);
        Boolean 上午結束 = 午休開始.Subtract(請假結束).TotalHours >= 0 ? true : false;
        Boolean 下午結束 = 午休結束.Subtract(請假結束).TotalHours <= 0 ? true : false;

        if (i == 0 && i == dates) //同一天
        {
            //請上午,請下午
            if (上午開始 && 上午結束 || 下午開始 && 下午結束)
            {
                請假時數 += 請假結束.Subtract(請假開始).TotalHours;
            }
            else //請整天,跨越午休
            {
                if (上午開始) 請假時數 += 午休開始.Subtract(請假開始).TotalHours;
                if (下午結束) 請假時數 += 請假結束.Subtract(午休結束).TotalHours;
            }
        }
        else if (i == 0 && i < dates) //第一天
        {
            if (上午開始) 請假時數 += 午休開始.Subtract(請假開始).TotalHours + 4.5;
            if (下午開始) 請假時數 += 下班時間.Subtract(請假開始).TotalHours;
        }
        else if (i != 0 && i == dates) //最後一天
        {
            if (上午結束) 請假時數 += 請假結束.Subtract(上班時間).TotalHours;
            else 請假時數 += 3.5;

            if (下午結束) 請假時數 += 請假結束.Subtract(午休結束).TotalHours;
        }
        else
        {
            請假時數 += 8;
        }
    }
    txt總時數.Text = 請假時數.ToString();
    txt總天數.Text = (請假時數 / 8).ToString();
    //txt總天數.Text = Math.Floor(請假時數 / 8).ToString(); //無條件捨去
}

文章標籤

伊 發表在 痞客邦 留言(0) 人氣()

這個功能,說真的我不知道用在哪裡好,
不過老闆想要這樣的頁面,所以我就做了,
上網搜尋了一下,關於在網頁製作這個功能的資訊實在不多(可能是太簡單了,所以沒人分享),
大部分都是WindowForm上操作TreeView的文章,
所以我就分享一下在網頁上操作TreeView的程式碼吧!

文章標籤

伊 發表在 痞客邦 留言(0) 人氣()

字串的宣告
string 變數 = string.Empty;
string 變數 = "abcdefg";

Session內容的取出

伊 發表在 痞客邦 留言(0) 人氣()

1,int轉成string
用toString
或者Convert.toString()如下

例如:

文章標籤

伊 發表在 痞客邦 留言(1) 人氣()

原本想使用RegularExpressionValidator來驗證日期格式
可是發現有一種更簡易的方法:

使用CompareValidator驗證元件

伊 發表在 痞客邦 留言(0) 人氣()

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating

    'Find Controller
    Dim tb As TextBox = CType(GridView1.Rows(e.RowIndex).FindControl("TextBox1"), TextBox)

    If tb.Text = "" Then ...略...

End Sub

伊 發表在 痞客邦 留言(0) 人氣()

目的:當畫面中有很多TextBox時,每個TextBox又有各自負責的Button,想要讓使用者輸入完畢按下Enter後,就能夠觸發該Button Click的動作。

方法:

<asp:Panel ID="Panel2" runat="server" DefaultButton="Button1">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Submit" />
</asp:Panel>

伊 發表在 痞客邦 留言(0) 人氣()

MSDN

這個屬性是 .NET Framework 2.0 版的新功能。
這個物件可用來管理、註冊和加入指令碼至頁面。

Public Sub ClientScriptAlert(ByVal msgStr As String)
    Dim sScript As String
    sScript = "alert('" & msgStr & "')"
    Me.ClientScript.RegisterStartupScript(Me.GetType, "error", sScript, True)
End Sub

試用的結果:

伊 發表在 痞客邦 留言(0) 人氣()

很不錯的介紹:GridView Event

了解GridView事件(Event)

GridView實在是非常好入門的控制項,讓我們可以知一解百,也就是說,你如果能完全了解GridView控制項,那其他類似的資料處理控制項你也差不多學完了,所以對GridView的投資是非常值得。

除了要好好了解拉放之間滑鼠及Vistual Studio帶來的便利,我覺的學好GridView 事件,對學習ASP.NET有更重大的意義,一般控制項了不起就是Page_Load、Click、Change、Select這幾類,但GridView不同,因為它能幫你做好多好多事,所以他的事件就複雜很多,複雜不代表難。

伊 發表在 痞客邦 留言(0) 人氣()

在網路搜尋到的,來源不明 (我猜應該是直接從外文翻譯過來的)

void BindData()
{
    string sql = "select top 10 ID,jobno,jobfixno,jobtype from jobse";
    SqlDataAdapter myda = new SqlDataAdapter(sql, conn);

伊 發表在 痞客邦 留言(0) 人氣()

稍作修正,之前寫的有一些錯誤,Excel在Server並不會關閉,而且只能在Server執行,Client並不會出現Excel應用程式視窗,視窗反而出現在Server端。
Server端Excel不會關閉(在[工作管理員]→[處理程序]內),可以參考此文章


這次使用內建的excel.dll來製作excel功能,如下:

Dim xlApp As Application
Dim xlBook As Workbook
Dim xlSheet As Worksheet
Dim xlRange As Range

On Error Resume Next
xlApp = GetObject(, "Excel.Application")
If Err.Number() <> 0 Then
    Err.Clear()
    xlApp = CreateObject("Excel.Application")
    If Err.Number() <> 0 Then
        errMsg.Text = Err.Description
        Return
    End If
End If

xlBook = xlApp.Workbooks.Open(Server.MapPath("~\報表範本.xls"))
xlApp.DisplayAlerts = False
xlApp.Visible = True
xlBook.Activate() '設為做用中的目標
xlBook.Parent.Windows(1).Visible = True

xlSheet = xlBook.Worksheets(1) '選取第1個sheet
xlSheet.Activate() '設此sheet為做用中的目標

'填入資料,有三種方法
xlSheet.Range("A1").Value = "Value" '把資料填到A1的格子內
xlSheet.Range("A1","A2").Value = "Value" '把資料填到A1~A2的格子內
xlSheet.Range(xlSheet.Cells(1,1), xlSheet.Cells(2,1)).Value = "Value" 
'把資料填到A1~A2的格子內,Cells(row,column),A=1,B=2,C=3,D=4...

xlApp.Run("報表範本.xls" & "!Caculater")
xlBook.SaveAs("要另存的檔名.xls")
xlBook.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) '關閉Excel
xlApp = Nothing
xlBook = Nothing
xlSheet = Nothing
xlRange = Nothing

 


 

文章標籤

伊 發表在 痞客邦 留言(0) 人氣()

當GridView的資料是在程式裡面動態產生的時候,HtmlEncode屬性就無法在程式碼內設定,為了克服資料想顯示Htmlcode,所以將資料改用html顯示是一個辦法。
但是這樣就無法再做其他GridView相關的處理,所以我就去搜尋了,如何實現GridView的資料來源是動態產生,還可以設定BoundField屬性。
如下:


DataTable 轉成 HTML
文章標籤

伊 發表在 痞客邦 留言(0) 人氣()

最近突然需要這個功能,上google搜尋找到此篇文章:擴展 GridView 控制項 - 無資料時顯示標題列,是來自點部落,算蠻有名的.net部落格。
可是一邊看文章,心裡就OS覺得,只是要顯示標題列有必要搞的這麼麻煩嗎?(我承認我懶...程度又很低落...)
所以自己想了另一個非常沒有技術的方法實現這個功能,請往下看... :D

'首先將查詢出來的table塞到date table

伊 發表在 痞客邦 留言(0) 人氣()

一般情況下:

Page.PreInit 
Page.Init 
Page.InitComplete 
Page.PreLoad 

文章標籤

伊 發表在 痞客邦 留言(0) 人氣()

«12 3