程式碼下載: http://files.dotblogs.com.tw/jeff377%5C0806%5C2008617214725464.zip

在上篇文章中示範了頁面的 TextBox 如何呼叫出「彈出式日期選擇視窗」,那在 FormView 及 GridView 中的 TextBox 要如何實作呼叫「彈出式日期選擇視窗」呢?

首先撰寫一個 CreateDateSelectScript 函式,這個函式作用是在 TextBox 的 onclick 產生日期選擇的 JavaScript。

    ''' <summary>
    ''' 在 TextBox 的 onclick 產生日期選擇的 JavaScript。
    ''' </summary>
    ''' <param name="TextBox">要加入日期選擇的 TextBox 控制項</param>
    Sub CreateDateSelectScript(ByVal TextBox As System.Web.UI.WebControls.WebControl)
        Dim sScript As String
        Dim sUrl As String

        '日期輸入的頁面,將 TextBox 以 TextBoxId 網址參數傳給日期頁面
        sUrl = "Calendar.aspx?TextBoxId=" & TextBox.ClientID
        sScript = "window.open('" & sUrl & "','','height=315,width=350,status=no,toolbar=no,menubar=no,location=no','')"
        TextBox.Attributes("onclick") = sScript
    End Sub

在 FormView 中的 InsertTemplate 及 EditTemplate 中放置一個 ID="txtBirthDate" 的 TextBox 控制項

        <asp:FormView ID="FormView1" runat="server" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1"
            Width="256px">
            <EditItemTemplate>
                BirthDate:
                <asp:TextBox ID="txtBirthDate" runat="server" Text='<%# Bind("BirthDate") %>'></asp:TextBox><br />
                <br />
                <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
                    Text="更新"></asp:LinkButton>
                <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                    Text="取消"></asp:LinkButton>
            </EditItemTemplate>
            <InsertItemTemplate>
                BirthDate:
                <asp:TextBox ID="txtBirthDate" runat="server" Text='<%# Bind("BirthDate") %>'></asp:TextBox><br />
                <br />
                <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
                    Text="插入"></asp:LinkButton>
                <asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                    Text="取消"></asp:LinkButton>
            </InsertItemTemplate>
        </asp:FormView>

在 FormView 的 DataBound 事件中,處理 Insert 及 Edit 模式中 ID="txtBirthDate" 的 TextBox 的日期選擇

    Protected Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound
        Dim oTextBox As TextBox

        '處理 FormView 中 Insert 及 Edit 模式中 ID="txtBirthDate" 的 TextBox 的日期選擇
        If FormView1.CurrentMode <> FormViewMode.ReadOnly Then
            oTextBox = FormView1.FindControl("txtBirthDate")
            CreateDateSelectScript(oTextBox)
        End If

    End Sub

再來要實作 GridView 中的日期選擇,將 GirdView 中的 BirthDate 轉為 TemplateField,將 TemplateField 的 EditItemTemplate 中 TextBox 設 ID="txtBirthDate。

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID"
            DataSourceID="SqlDataSource1" EmptyDataText="沒有資料錄可顯示。">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" ReadOnly="True" SortExpression="EmployeeID" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                <asp:TemplateField HeaderText="BirthDate" SortExpression="BirthDate">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtBirthDate" runat="server" Text='<%# Bind("BirthDate") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("BirthDate") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

 在 GridView RowDataBound 事件中,處理 GridView 中 ID="txtBirthDate" 的TextBox 的日期選取

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        Dim oTextBox As TextBox

        '處理 GridView 中 ID="txtBirthDate" 的TextBox 的日期選取
        If (e.Row.RowState And DataControlRowState.Edit) = DataControlRowState.Edit Then
            oTextBox = e.Row.FindControl("txtBirthDate")
            CreateDateSelectScript(oTextBox)
        End If
    End Sub

ASP.NET 魔法學院


DotBlogs Tags: FormView GridView javascript

Feedback

  • JASON 2008/4/18 下午 05:05 回覆

    # re: FormView 及 GridView 中的彈出式日期選擇視窗

    附件已經不能下載
    請問只要將 Sub .... End Sub放在<script runat="server"> </script>之間嗎?

  • jeff 2008/4/19 上午 10:29 回覆

    # re: FormView 及 GridView 中的彈出式日期選擇視窗

    程式碼是置於 GridView 的 RowDataBound 事件中。

  • zmin 2008/6/14 下午 04:17 回覆

    # re: FormView 及 GridView 中的彈出式日期選擇視窗

    可否再上傳一次附件.......
    感恩...

  • sam 2009/1/9 下午 01:53 回覆

    # re: FormView 及 GridView 中的彈出式日期選擇視窗

    請問老師
    DetailView要怎麼用呢

  • sam 2009/1/9 下午 04:59 回覆

    # re: FormView 及 GridView 中的彈出式日期選擇視窗

    老師您好

    關於 DETAILVIEW 與 CALENDAR 的相關問題我解決了
    用的是老師教的 彈出式日期選擇視窗
    不過我有好幾個欄位都會用到日期選擇視窗
    我看老師的程式碼 好像是針對專一的欄位
    有辦法可以編成好幾個欄位都選擇這個視窗嗎

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 4 and 5 and type the answer here: