จาก Entry ที่แล้วคุณ http://www.exteen.com ได้ฝากโจทย์เพิ่มมา ผมเลยมาลองๆ เขียนดู

โจทย์ก็คือ ต้องการสร้าง DropDownList 3 อัน ให้แสดง ปี เดือน วัน ที่สัมพันธ์กัน

มาเริ่มกันเลยนะครับ

ในส่วนของ Design
สร้าง DropDownList ขึ้นมา 3 อัน แสดง ปี เดือน วัน
สร้าง Label เพื่อแสดง วัน/เดือน/ปี ที่เลือก




ในส่วนของ Source

ตั้งค่า Property ตามด้านล่างได้เลยครับ
*ในส่วนของ ddlDay กับ ddlMonth ตั้ง Format ให้อยู่ในรูป dd กับ MM ครับ โดยใช้
DataTextFormatString='{0:00}' เป็นตัวกำหนด
และ DropDownList ทั้ง 3 ตัว กำหนดให้
AutoPostBack="true" คือทำการ Active ทันที่ที่เลือกเสร็จ

Select Month:
<asp:DropDownList ID="ddlYear" runat="server" AutoPostBack="true"
            DataValueField="GenYear" DataTextField="GenYear">
asp:DropDownList>
<br />
Select Month:
<asp:DropDownList ID="ddlMonth" runat="server" AutoPostBack="true"
            DataValueField="GenMonth" DataTextField="GenMonth" DataTextFormatString='{0:00}'>
asp:DropDownList>
<br />
Select Day:
<asp:DropDownList ID="ddlDay" runat="server"  AutoPostBack="true"
            DataValueField="GenDay" DataTextField="GenDay" DataTextFormatString='{0:00}'>
asp:DropDownList>
<p>
<asp:Label ID="lblSeleceDate" runat="server" />
p>

ในส่วนของ Script
ตรงนี้ผมได้เขียนโปรแกรมย่อยเพื่อเรียกใช้โปรแกรมย่อย (Public Sub) และทำให้ Source Code จะได้ไม่ยาวมากครับ

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
       If Not Me.Page.IsPostBack Then
            Dim DateNow As Date
            DateNow = Date.Now()
            GenerateDay(Date.DaysInMonth(DateNow.Year, DateNow.Month))
            GenerateMonth()
            GenerateYear(1900)
            Me.ddlDay.SelectedValue = DateNow.Day
            Me.ddlMonth.SelectedValue = DateNow.Month
            Me.ddlYear.SelectedValue = DateNow.Year
        End If
End Sub


Public Sub GenerateYear(ByVal StartYear As Integer)
        Dim ThisYear As Integer = Date.Now().Year
        Dim dt As DataTable = New DataTable("GenerateYear")
        Dim dtc As DataColumn
        Dim dtr As DataRow
        dtc = New DataColumn()
        dtc.DataType = System.Type.GetType("System.Int64")
        dtc.ColumnName = "GenYear"
        dt.Columns.Add(dtc)
        For i As Integer = StartYear To ThisYear
            dtr = dt.NewRow()
            dtr(0) = i
            dt.Rows.Add(dtr)
        Next
        Me.ddlYear.DataSource = dt
        Me.ddlYear.DataBind()
End Sub


Public Sub GenerateMonth()
        Dim dt As DataTable = New DataTable("GenerateMonth")
        Dim dtc As DataColumn
        Dim dtr As DataRow
        dtc = New DataColumn()
        dtc.DataType = System.Type.GetType("System.Int64")
        dtc.ColumnName = "GenMonth"
        dt.Columns.Add(dtc)
        For i As Integer = 1 To 12
            dtr = dt.NewRow()
            dtr(0) = i
            dt.Rows.Add(dtr)
        Next
        Me.ddlMonth.DataSource = dt
        Me.ddlMonth.DataBind()
End Sub


Public Sub GenerateDay(ByVal TotalDay As Integer)
        Dim dt As DataTable = New DataTable("GenerateDay")
        Dim dtc As DataColumn
        Dim dtr As DataRow
        dtc = New DataColumn()
        dtc.DataType = System.Type.GetType("System.Int64")
        dtc.ColumnName = "GenDay"
        dt.Columns.Add(dtc)
        For i As Integer = 1 To TotalDay
            dtr = dt.NewRow()
            dtr(0) = i
            dt.Rows.Add(dtr)
        Next
        Me.ddlDay.DataSource = dt
        Me.ddlDay.DataBind()
End Sub


Protected Sub ddlYear_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlYear.SelectedIndexChanged
        GenerateDay(Date.DaysInMonth(Me.ddlYear.SelectedValue, Me.ddlMonth.SelectedValue))
End Sub


Protected Sub ddlMonth_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlMonth.SelectedIndexChanged
      
GenerateDay(Date.DaysInMonth(Me.ddlYear.SelectedValue, Me.ddlMonth.SelectedValue))
End Sub

Protected Sub ddlDay_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlDay.SelectedIndexChanged
        Me.lblSeleceDate.Text = "Your select date: " _
            & Me.ddlDay.SelectedItem.Text & "/" _
            & Me.ddlMonth.SelectedItem.Text & "/" _
            & Me.ddlYear.SelectedItem.Text 
            '--- แสดงผลการเลือกที่ Label
End Sub


ผลการ Run



จบแล้วครับ

เนื่องจากวันนี้งานเข้ามากมายเลยไม่ได้อธิบาย Source Code ให้ละเอียดได้ หากใครติดตรงไหน หรือมีข้อสงสัยอื่นๆ ก็ทิ้งคำถามไว้ได้ครับเดี๋ยวผมจะเข้ามาตอบให้ครับ

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

ภาษา VB นี่ มี DIM = Dimension ป่ะครับ ไม่แน่ใจว่ามันย่อว่าไร อ่อ นึกออกแล้ว
เพราะมันไม่มีการกำหนดว่า Type มันคือ เลข หรือ ตัวหนังสือ
DIM มันเหมารวมได้หมด แต่คิดๆดู นึกถึง DIM SUM = ติ่มซำ เนอะ ฮ่าๆ

#1 By n h e p h e x on 2009-06-05 17:16

#1 เข้าใจถูกต้องแล้วครับ
แต่อย่าไปปนกับติ่มซำนะครับมันไม่เกี่ยวกัน 555+confused smile

#2 By veeza on 2009-06-05 20:13

เขียนดีคับ เข้าใจง่าย

highlight สีเองด้วย สวยงาม confused smile

#3 By TonHor on 2009-06-05 21:10

โอ้ ขอบคุณครับ เดี๋ยวเอาไปใช้งานต่อ

#4 By HellHound on 2009-06-06 09:26

O_o อื้อฮื้อ VB ไม่ถูกโรคกับผมเลยครับ
แต่เอาโค้ดไปอะแดปใช้ได้ ขอบคุณมากเลยครับ

#5 By r i j e -[a x k i z e l] on 2009-06-08 10:49

กำลังหายอยู่พอดีเลยย ขอบคุณครับ

#6 By (110.164.96.205) on 2009-10-14 16:16