请问DATAGRID怎么实现点击TEXTBOX控件弹出Calendar选择日期 
谢谢了.

解决方案 »

  1.   

    前台
    -------------------------
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
                    <cc1:PopupControlExtender ID="popcontorl" runat="server" 
                        PopupControlID ="Panel1" TargetControlID ="txtEnter" Position ="Right" >
                    </cc1:PopupControlExtender>
                <asp:Panel ID="Panel1" runat="server">
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                        <ContentTemplate>
                            <asp:Calendar ID="Calendar1" runat="server" BackColor="White" 
                                BorderColor="#3366CC" BorderWidth="1px" CellPadding="1" 
                                DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" 
                                ForeColor="#003399" Height="200px" 
                                onselectionchanged="Calendar1_SelectionChanged" Width="220px">
                                <SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
                                <SelectorStyle BackColor="#99CCCC" ForeColor="#336666" />
                                <WeekendDayStyle BackColor="#CCCCFF" />
                                <TodayDayStyle BackColor="#99CCCC" ForeColor="White" />
                                <OtherMonthDayStyle ForeColor="#999999" />
                                <NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />
                                <DayHeaderStyle BackColor="#99CCCC" ForeColor="#336666" Height="1px" />
                                <TitleStyle BackColor="#003399" BorderColor="#3366CC" BorderWidth="1px" 
                                    Font-Bold="True" Font-Size="10pt" ForeColor="#CCCCFF" Height="25px" />
                            </asp:Calendar>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </asp:Panel>
    ---------------------------后台
     protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            popcontorl.Commit(Calendar1.SelectedDate.ToShortDateString());
        }
      

  2.   

    此处用的到了ajax  其实就是几个控件而已。 看看前台代码
      

  3.   

    function calendar(isShowTime) //主调函数
    {    
        if(typeof(isShowTime)!="undefined")
        {
            bUseTime=isShowTime;
        }
        else
        {
            bUseTime = false;
        }
         
        if(bUseTime)
        {
            odatelayer.timer.style.display='';
        }
        else
        {
            odatelayer.timer.style.display='none';
        }
        
    var dads = document.all.endDateLayer.style;
    var tt = window.event.srcElement;   
    var th = tt;
    var ttop = tt.offsetTop-5; //TT控件的定位点高
       
    var thei = tt.clientHeight; //TT控件本身的高
    var tleft = tt.offsetLeft; //TT控件的定位点宽 var ttyp = tt.type; //TT控件的类型 while (tt = tt.offsetParent){ttop+=tt.offsetTop; tleft+=tt.offsetLeft;}
    dads.top = (ttyp=="image") ? ttop+thei : ttop+thei+6;
    dads.left = tleft;

    outObject = th;
    outButton = th; //设定外部点击的按钮 //根据当前输入框的日期显示日历的年月
    var reg = /^(\d+)-(\d{1,2})-(\d{1,2})/; //不含时间
    var r = outObject.value.match(reg);
    if(r!=null){
    r[2]=r[2]-1;
    var d=new Date(r[1],r[2],r[3]);
    if(d.getFullYear()==r[1] && d.getMonth()==r[2] && d.getDate()==r[3])
    {
    outDate=d;
    parent.meizzTheYear = r[1];
    parent.meizzTheMonth = r[2];
    parent.meizzTheDate = r[3];
    }
    else
    {
    outDate="";
    }
    meizzSetDay(r[1],r[2]+1);
    }
    else
    {
    outDate="";
    meizzSetDay(new Date().getFullYear(), new Date().getMonth() + 1);
    }
    dads.display = ''; //判断初始化时是否使用时间,非严格验证
    //if (outObject.value.length>10)
    //{
    // bUseTime=true;
    meizzWriteHead(meizzTheYear,meizzTheMonth);
    //}
    //else
    //{
    // bUseTime=false;
    // meizzWriteHead(meizzTheYear,meizzTheMonth);
    //} try
    {
    event.returnValue=false;
    }
    catch (e)
    {
    //此处排除错误,错误原因暂未找到。
    }
    }<asp:GridView ID="gridview1" Width="100%"    runat="server" BorderWidth="0px"   
                                                            onrowdatabound="gridview1_RowDataBound" >
     <EmptyDataTemplate>
    </EmptyDataTemplate>
    <Columns>
    <asp:TemplateField HeaderStyle-Width="5%"  HeaderText="">
        <ItemTemplate>
          <asp:TextBox ID="txtDate" runat="server"Style="cursor: hand" Width="146px"></asp:TextBox>  
      </ItemTemplate>
                                                                                          </asp:GridView>[code=C#]
    protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TextBox txtDate = e.Row.FindControl("txtDate") as TextBox;
                if (txtDate != null)
                {
                    txtDate.Attributes.Add("onclick", "calendar(false)");
                }
             }
        }
    [/code]
      

  4.   

    饿.我想要的是DATAGRID里面的呀..
    普通的TEXTBOX的我弄的好.就是在DATAGRID里的TEXTBOX怎么取就整不出来了...
      

  5.   


    function calendar(isShowTime) //主调函数
    {    
        if(typeof(isShowTime)!="undefined")
        {
            bUseTime=isShowTime;
        }
        else
        {
            bUseTime = false;
        }
         
        if(bUseTime)
        {
            odatelayer.timer.style.display='';
        }
        else
        {
            odatelayer.timer.style.display='none';
        }
        
        var dads = document.all.endDateLayer.style;
        var tt = window.event.srcElement;   
        var th = tt;
        var ttop = tt.offsetTop-5;    //TT控件的定位点高
       
        var thei = tt.clientHeight;    //TT控件本身的高
        var tleft = tt.offsetLeft;    //TT控件的定位点宽    var ttyp = tt.type;    //TT控件的类型    while (tt = tt.offsetParent){ttop+=tt.offsetTop; tleft+=tt.offsetLeft;}
        dads.top = (ttyp=="image") ? ttop+thei : ttop+thei+6;
        dads.left = tleft;
        
        outObject = th;
        outButton = th;    //设定外部点击的按钮    //根据当前输入框的日期显示日历的年月
        var reg = /^(\d+)-(\d{1,2})-(\d{1,2})/;        //不含时间
        var r = outObject.value.match(reg);
        if(r!=null){
            r[2]=r[2]-1;
            var d=new Date(r[1],r[2],r[3]);
            if(d.getFullYear()==r[1] && d.getMonth()==r[2] && d.getDate()==r[3])
            {
                outDate=d;
                parent.meizzTheYear = r[1];
                parent.meizzTheMonth = r[2];
                parent.meizzTheDate = r[3];
            }
            else
            {
                outDate="";
            }
            meizzSetDay(r[1],r[2]+1);
        }
        else
        {
            outDate="";
            meizzSetDay(new Date().getFullYear(), new Date().getMonth() + 1);
        }
        dads.display = '';    //判断初始化时是否使用时间,非严格验证
        //if (outObject.value.length>10)
        //{
        //    bUseTime=true;
            meizzWriteHead(meizzTheYear,meizzTheMonth);
        //}
        //else
        //{
        //    bUseTime=false;
        //    meizzWriteHead(meizzTheYear,meizzTheMonth);
        //}    try
        {
            event.returnValue=false;
        }
        catch (e)
        {
            //此处排除错误,错误原因暂未找到。
        }
    }<asp:GridView ID="gridview1" Width="100%"    runat="server" BorderWidth="0px"   
                                                            onrowdatabound="gridview1_RowDataBound" >
     <EmptyDataTemplate>
    </EmptyDataTemplate>
    <Columns>
    <asp:TemplateField HeaderStyle-Width="5%"  HeaderText="">
        <ItemTemplate>
          <asp:TextBox ID="txtDate" runat="server"Style="cursor: hand" Width="146px"></asp:TextBox>  
      </ItemTemplate>
                                                                                          </asp:GridView>
    protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TextBox txtDate = e.Row.FindControl("txtDate") as TextBox;
                if (txtDate != null)
                {
                    txtDate.Attributes.Add("onclick", "calendar(false)");
                }
             }
        }
      

  6.   

    使用模板列,模板列里面用Calendar控件
      

  7.   

    使用模板列,模板列里面用Calendar控件
    能详细点么..请问有例子么..
    谢谢了楼上的能给个DATAGRID的我么..gridview完全没用过..
      

  8.   

    这里就有源码:
    http://www.asp.net/AJAX/AjaxControlToolkit/Samples/Calendar/Calendar.aspx注意 TextBox 和 Calendar 都要在DataGrid模板列中