Gridview编辑项模板中无法识别文本框

时间:2010-08-12 15:52:53

标签: javascript asp.net gridview

我正在尝试使用日历控件在编辑模式下填充gridview单元格中的文本框。

错误在于此行

<a href="javascript:OpenPopupPage('Calendar.aspx','<%= txtGvEditTeDate.ClientID %>','<%= Page.IsPostBack %>');">

它无法识别文本框。

编译错误

编译器错误消息:CS0103:当前上下文中不存在名称“txtGvEditTeDate”

来源错误:

<EditItemTemplate>
        <asp:TextBox ID="txtGvEditTeDate" runat="server"   onfocus="blur();"
             Text='<%# Bind("TimeEntryDate", "{0:d}") %>'>
        </asp:TextBox>

       <a href="javascript:OpenPopupPage('Calendar.aspx','<%= txtGvEditTeDate.ClientID %>','<%= Page.IsPostBack %>');">
       <img src="images/icon-calendar.gif" border="0" align="middle" ></a>
</EditItemTemplate>

修改

我将runat =“server”添加到<a>,现在我没有收到错误,但是当在日历控件中选择了一个日期时,它没有插入到txtGvEditTeDate文本框中。

2 个答案:

答案 0 :(得分:2)

考虑将其<a id="r1" runat="server" />

然后,在RowDataBound或RowEditing中,执行:

var ctl = e.Row.FindControl("txtGvEditTeDate");
var link = e.Row.FindControl("r1");
link.href = "javascript ...";

从服务器分配。此外,您可能需要:e.Row.Cells []引用单元格,因为行查找控件有时对我没用。

编辑:如果您在将日期映射回编辑控件时遇到问题,那可能是因为每个控件都映射了附加到gridview的ID(查看源代码以查看我的意思),因此,控件不能是由txtGvEditTeDate引用,因此您将不得不提出一种解决方法。一种方法可能是将文本框引用存储在客户端javascript变量中,该变量可以在链接href语句中设置。这变得更加复杂。

答案 1 :(得分:0)

由于textBox位于EditItemTemplate中,因此您无法像这样访问它。你必须要么在数据绑定时使用findcontrol,要么依靠javascript来完成工作。