如何使用 JQuery c# 在嵌套网格视图 ASP.net 中使用日期时间选择器

Posted

技术标签:

【中文标题】如何使用 JQuery c# 在嵌套网格视图 ASP.net 中使用日期时间选择器【英文标题】:how to use datetime picker in nested grid view ASP.net using JQuery c# 【发布时间】:2016-07-04 20:55:27 【问题描述】:

我已经在 ASP.net 文本框中实现了日期时间选择器,但是当我在 gridview 或嵌套 gridview 中使用它时它会失败..

我想要的是.. 通过这个 JQuery 函数

$(function () 
    $("#<%= txtDate.ClientID %>").datepicker();
);

单击给定示例的嵌套网格视图时显示日期时间选择器..

<asp:GridView ID="GV_Proc" runat="server" AutoGenerateColumns="false" CssClass="Grid"
DataKeyNames="Procedure_Code" OnRowDataBound="GV_ProcOnRowDataBound" 
    onselectedindexchanged="gvProc_SelectedIndexChanged" Width="512px">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>          
                <img alt = "" style="cursor: pointer" src="../images/plus.png"  />             
                <asp:Panel ID="pnldiagtype" runat="server" Style="display: none">
                    <asp:GridView ID="gvProctype" runat="server" AutoGenerateColumns="false" CssClass = "ChildGrid">
                        <Columns>
                            <asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="">
                                <ItemTemplate>
                                    <asp:CheckBox ID="chk_Select" runat="server"/>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                                <ItemStyle Width="8%" />
                            </asp:TemplateField>
                            <asp:BoundField ItemStyle-Width="20%" DataField="Procedure_Type_ID" HeaderText="Procedure Type Id" />
                            <asp:BoundField ItemStyle-Width="20%" DataField="Procedure_Code" HeaderText="Procedure Code" />
                            <asp:BoundField ItemStyle-Width="100%" DataField="Procedure_Type_Desc" HeaderText="Description"  />

                            <asp:TemplateField HeaderText="Remarks" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="">
                                <ItemTemplate>
                                    <asp:TextBox ID="txt_Remarks" CssClass=".text" runat="server"></asp:TextBox>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                                <ItemStyle Width="8%" />
                            </asp:TemplateField>                           

                            <asp:TemplateField HeaderText="Date" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="">
                                <ItemTemplate>                                
                                    <asp:TextBox ID="txtDate" runat="server" />                                   
                                    <img src="../calender.png" />                                    
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                                <ItemStyle Width="8%" />
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </asp:Panel>
            </ItemTemplate>
        <ItemStyle Width="8%" />
    </asp:TemplateField>
    <asp:BoundField ItemStyle-Width="150px" DataField="Procedure_Code" HeaderText="Procedure ID"/>
    <asp:BoundField ItemStyle-Width="150px" DataField="Procedure_Description" HeaderText="Procedure Name" />
</Columns>  

当我尝试构建它时,它显示

当前上下文中不存在名称“txtDate”

任何帮助将是可应用的

当我在没有网格视图的情况下使用相同的功能时,运行成功..

我正在使用以下脚本和样式表

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/themes/base/jquery-ui.css" type="text/css" media="all" />
<link rel="stylesheet" href="http://static.jquery.com/ui/css/demo-docs-theme/ui.theme.css" type="text/css" media="all" />

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-1.8.0.js"></script>
<script type="text/javascript" src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

更新:

<script type="text/javascript">

$(document).ready(function () 
    $('.datepicker-text').datepicker();
);

并将 textBox 属性更新为

<asp:TextBox ID="txtDate" runat="server" CssClass="datepicker-text"/> 

【问题讨论】:

【参考方案1】:

datepicker 应该在 DOM 准备好时分配,以便所述对象存在。

在您的日期文本框上放置一个css 类,用它来选择datepicker 的文本框,因为可以有多行。

<asp:TextBox ID="txtDate" runat="server" CssClass="datepicker-text"/>

然后将datepicker分配给document.ready

$('.datepicker-text').datepicker();

【讨论】:

您能否发布您所做的更改以及您遇到的确切错误。 好的,您在浏览器控制台中查看,有没有错误?你能试着调试一下apply`datepicker, does selector $('.datepicker-text')`有任何长度的语句吗?【参考方案2】:

为什么要使用多个 jquery。您只能使用一个 jquery(生产中最少):

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-1.8.0.js"></script>

然后您谈论构建错误。可以发下服务器代码吗?您无法使用 txtDate 获取 txtDate,但您必须从 gridviewrow 开始使用 FindControl("txtDate")

【讨论】:

当我不使用第 4 个脚本时,这不会扩展 gridview 行。这就是使用它的原因。 错了!您必须只使用一个 jquery。如果您需要多个版本,有一个脚本来支持它们 那么我们如何支持他们呢?有什么想法吗? 你不应该使用...***.com/questions/1566595/…【参考方案3】:

这个怎么样。取一个文本框并具有textmode 属性并指定类

<asp:TextBox ID="txtDate" runat="server" TextMode="datepicker-text"/>

由于script tags有多个,我觉得和其他的有冲突,所以称它为

$(function () 
            var jQuery_1_11_4 = $.noConflict(true);
            jQuery_1_11_4(".datepicker-text").datepicker();
        );

【讨论】:

@user6002727 你试过我的吗?它对你有用吗? 是的,我已经尝试过了,但是 TextMode 属性中出现了构建错误。 使用 TextMode 属性指定 TextBox 控件是显示为单行、多行还是密码文本框。参考:msdn.microsoft.com/en-us/library/…

以上是关于如何使用 JQuery c# 在嵌套网格视图 ASP.net 中使用日期时间选择器的主要内容,如果未能解决你的问题,请参考以下文章

尝试以编程方式使用嵌套的 Stack 视图制作网格

如何在嵌套的 ASP.NET 列表视图中使用 jQuery 检测当前元素

如何在 C# 中更新或刷新与 Ms-access 连接的数据网格视图

如何使用 AJAX (jquery) 将嵌套的对象数组传递和接收到 c# WebMethod 中?

如何使单元格仅在填充后才能读取?数据网格视图 C#

如何在具有嵌套数据的网格中设置组合框值? Extjs 4.2 Mvc