首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

自定义控件传值有关问题(100分 急问)

2012-04-17 
自定义控件传值问题(100分 急问)我想做一个年月日下拉菜单的自定义控件放到gridview里面,然后选择日期后自

自定义控件传值问题(100分 急问)
我想做一个年月日下拉菜单的自定义控件放到gridview里面,然后选择日期后自动对
gridview里面同一行的textbox传值

具体代码如下
<%@   Control   Language= "VB "   AutoEventWireup= "false "   CodeFile= "RsskYmdDrop.ascx.vb "   Inherits= "RsskYmdDrop "   %>
<asp:DropDownList   ID= "drpYear "   runat= "server ">
</asp:DropDownList>
年 <asp:DropDownList   ID= "drpMonth "   runat= "server ">
</asp:DropDownList>
月 <asp:DropDownList   ID= "drpDay "   runat= "server ">
</asp:DropDownList> 日&nbsp; <br   />


Partial   Class   RsskYmdDrop
        Inherits   System.Web.UI.UserControl


        '   年
        Private   _year   As   Integer
        Public   Property   year()   As   Integer
                Get
                        Return   _year
                End   Get
                Set(ByVal   value   As   Integer)
                        _year   =   value
                End   Set
        End   Property

        '   月
        Private   _month   As   Integer
        Public   Property   month()   As   Integer
                Get
                        Return   _month
                End   Get
                Set(ByVal   value   As   Integer)
                        _month   =   value
                End   Set
        End   Property

        '   日
        Private   _day   As   Integer
        Public   Property   day()   As   Integer
                Get
                        Return   _day
                End   Get
                Set(ByVal   value   As   Integer)
                        _day   =   value
                End   Set
        End   Property

        '   日期选择改变之后需要设定具体日期的控件ID
        Private   _bindClientId   As   String
        Public   Property   bindClientId()   As   String
                Get
                        Return   _bindClientId


                End   Get
                Set(ByVal   value   As   String)
                        _bindClientId   =   value
                End   Set
        End   Property

        Protected   Sub   Page_Load(ByVal   sender   As   Object,   ByVal   e   As   System.EventArgs)   Handles   Me.Load
                '   年
                drpYear.Items.Clear()
                drpYear.Items.Add( " ")
                Dim   i   As   Int16
                For   i   =   2005   To   2020
                        drpYear.Items.Add(i)
                Next
                drpYear.Items(_year   -   2004).Selected   =   True
                '   月
                drpMonth.Items.Clear()
                drpMonth.Items.Add( " ")
                For   i   =   1   To   12
                        drpMonth.Items.Add(i)
                Next
                drpMonth.Items(_month).Selected   =   True
                '   日
                Dim   days   =   getDays(_month)
                drpDay.Items.Clear()
                drpDay.Items.Add( " ")
                For   i   =   1   To   days
                        drpDay.Items.Add(i)
                Next
                drpDay.Items(_day).Selected   =   True

                Dim   dateSetStr   As   String   =   " <script> "   +   vbCrLf
                dateSetStr   +=   "function   dateSet(val1,   val2,   val3,   val4)   { "   +   vbCrLf
                dateSetStr   +=   "var   daysInMonth   =   new   Array(31,   28,   31,   30,   31,   30,   31,   31,30,   31,   30,   31); "   +   vbCrLf
                dateSetStr   +=   "var   year   =   document.all[val1].value   -1 "   +   vbCrLf
                dateSetStr   +=   "var   month   =   document.all[val2].value   -1 "   +   vbCrLf


                dateSetStr   +=   "if   (1   ==   month)   {days=   ((0   ==   year   %   4)   &&   (0   !=   (year   %   100)))   ||(0   ==   year   %   400)   ?   29   :   28}; "   +   vbCrLf
                dateSetStr   +=   "else   days   =   daysInMonth[month]; "   +   vbCrLf
                dateSetStr   +=   "         document.all[val3].options.length   =   0;   "   +   vbCrLf
                dateSetStr   +=   "for   (i=1;i <=   days;i++)   { "   +   vbCrLf
                dateSetStr   +=   "         var   op   =   window.document.createElement( 'OPTION ');     "   +   vbCrLf
                dateSetStr   +=   "         op.value   =   i; "   +   vbCrLf
                dateSetStr   +=   "         op.innerHTML   =   i;   "   +   vbCrLf
                dateSetStr   +=   "         document.all[val3].appendChild(op);   "   +   vbCrLf
                dateSetStr   +=   "} "   +   vbCrLf
                dateSetStr   +=   "toEDate(val1,   val2,   val3,   val4) "   +   vbCrLf
                dateSetStr   +=   "} "   +   vbCrLf
                dateSetStr   +=   " </script> "   +   vbCrLf

                Page.ClientScript.RegisterClientScriptBlock(Me.GetType,   "dateSet ",   dateSetStr)

                Dim   toEDateStr   As   String   =   " <script> "   +   vbCrLf
                toEDateStr   +=   "function   toEDate(val1,   val2,   val3,eDate)   { "   +   vbCrLf
                toEDateStr   +=   "var   yearValue   =   document.all[val1].value "   +   vbCrLf
                toEDateStr   +=   "var   monthValue   =   document.all[val2].value   "   +   vbCrLf
                toEDateStr   +=   "var   dayValue   =   document.all[val3].value   "   +   vbCrLf
                toEDateStr   +=   "document.all[eDate].value   =   yearValue   +   '- '+monthValue+ '- '+dayValue "   +   vbCrLf
                toEDateStr   +=   "} "   +   vbCrLf


                toEDateStr   +=   " </script> "   +   vbCrLf

                Page.ClientScript.RegisterClientScriptBlock(Me.GetType,   "toEDate ",   toEDateStr)

                drpYear.Attributes.Add( "onChange ",   "dateSet( ' "   +   drpYear.ClientID   +   " ',   ' "   +   drpMonth.ClientID   +   " ', ' "   +   drpDay.ClientID   +   " ', ' "   +   _bindClientId   +   " ') ")
                drpMonth.Attributes.Add( "onChange ",   "dateSet( ' "   +   drpYear.ClientID   +   " ',   ' "   +   drpMonth.ClientID   +   " ', ' "   +   drpDay.ClientID   +   " ', ' "   +   _bindClientId   +   " ') ")
                drpDay.Attributes.Add( "onChange ",   "toEDate( ' "   +   drpYear.ClientID   +   " ',   ' "   +   drpMonth.ClientID   +   " ', ' "   +   drpDay.ClientID   +   " ', ' "   +   _bindClientId   +   " ') ")
        End   Sub


        Protected   Function   getDays(ByVal   month   As   String)   As   Int16
                Dim   bigMonth()   As   String   =   {1,   3,   5,   7,   8,   10,   12}
                Dim   smallMonth()   As   String   =   {4,   6,   9,   11}
                Dim   runFlg   As   Boolean   =   False
                If   ((year   Mod   4   =   0)   And   (year   Mod   100   <>   0))   Or   (year   Mod   400   =   0)   Then
                        runFlg   =   True
                End   If
                If   InStr(Join(bigMonth,   "       "),   month)   >   0   Then
                        Return   31
                ElseIf   InStr(Join(smallMonth,   "       "),   month)   >   0   Then
                        Return   29
                ElseIf   runFlg   Then
                        Return   29
                Else
                        Return   28
                End   If
        End   Function


End   Class


在具体调用的时候
<asp:TemplateField>
                            <HeaderTemplate>
                                      <asp:Label   ID= "lblJrgstdtcT "   runat= "server "   Text= "日期 "> </asp:Label>
                              </HeaderTemplate>
                           <ItemTemplate>
                                    <uc1:RsskYmdDrop   ID= "RsskYmdDrop1 "   runat= "server "   year= ' <%#   Eval( "YEAR ")   %> '   month= ' <%#   Eval( "MONTH ")   %> '   day= ' <%#   Eval( "DAY ")   %> '   bindClientId= " <%=txtYmd.ClientId%> "/>
                                    <br/>
                                    <asp:textbox   id= "txtYmd "   readonly= "true "/>
                           </ItemTemplate>
                              <HeaderStyle   CssClass= "gridViewHeader "   Width= "20% "   />
                      </asp:TemplateField>


出现的问题是:
<uc1:RsskYmdDrop   ID= "RsskYmdDrop1 "   runat= "server "   year= ' <%#   Eval( "YEAR ")   %> '   month= ' <%#   Eval( "MONTH ")   %> '   day= ' <%#   Eval( "DAY ")   %> '   bindClientId= " <%=txtYmd.ClientId%> "/>

1     year= ' <%#   Eval( "YEAR ")   %> '
数据库中年月日的值传不到自定义控件中

2     bindClientId= " <%=txtYmd.ClientId%> "/>
将 " <%=txtYmd.ClientId%> "当作字符串传给了自定义控件   而没有解析 <%=%> 里面的东西




[解决办法]
谁知道啊,帮帮忙!
[解决办法]
webform不太了解,试试Tag属性,可以让你在控件里存储自定义的信息
[解决办法]
是自定义控件的值传不到引用自定义控件的页面中去
可以在自定义控件中定义相关的变量啊。在应用的页面中,定义一个自定义控件的变量,不就OK了?
[解决办法]
你说的自定义控件是指用户控件还是服务器端控件
[解决办法]
vb.net中 <Bindable(True)> Public Property year() As Integer....

热点排行