我有一个应用程序是在我开始工作之前开发的,而datepickers是自定义的。我们最近迁移到Windows 8,自定义日期选择器不再工作。所以我开始为jquery-ui datepicker更改它们,一切都像我期待的那样。但现在我遇到了一个问题。其中一些自定义日期选择器处于Telerik RadGrid的编辑/插入模式。我的jquery-ui datepicker弹出窗口,当文本框使用控件的id获得焦点时使用一些java脚本。我没有问题使新控件出现在编辑/插入模式中,其中包含正确的值。我的问题是,当控件获得焦点时,我无法找到RadGrid的编辑/插入模式的控件ID以弹出datepicker。任何帮助将不胜感激。
答案 0 :(得分:0)
请尝试使用以下代码段。
<强> ASPX 强>
<head runat="server">
<title></title>
<telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server" />
</head>
<body>
<form id="form1" runat="server">
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
</telerik:RadScriptManager>
<script type="text/javascript">
function TextBoxFocus(obj) {
alert(obj.id);
//Access client ID here
}
function RadTextBoxFocus(sender, args) {
alert(sender.get_id());
//Access client ID here
}
</script>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
</telerik:RadAjaxManager>
<div>
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource" OnItemDataBound="RadGrid1_ItemDataBound">
<MasterTableView>
<Columns>
<telerik:GridBoundColumn DataField="ID" HeaderText="ID" UniqueName="ID"></telerik:GridBoundColumn>
<telerik:GridTemplateColumn UniqueName="Name" DataField="Name">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadTextBox ID="TextBox1" runat="server" Text='<%# Eval("Name") %>'>
<ClientEvents OnFocus="RadTextBoxFocus" />
</telerik:RadTextBox>
</EditItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridEditCommandColumn></telerik:GridEditCommandColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
</div>
</form>
</body>
</html>
<强> ASPX.CS 强>
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, "Name1");
dt.Rows.Add(2, "Name2");
dt.Rows.Add(3, "Name3");
RadGrid1.DataSource = dt;
}
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridEditableItem && e.Item.IsInEditMode)
{
GridEditableItem item = e.Item as GridEditableItem;
TextBox TextBox1 = item["ID"].Controls[0] as TextBox;
TextBox1.Attributes.Add("onfocus", "TextBoxFocus(this);");
}
}
如果有任何疑虑,请告诉我。
答案 1 :(得分:0)
我设法访问控件,我不知道我做的非常糟糕,因为它非常简单。
ASPX
<asp:TextBox ID="BoxILookFor" runat="server" Text='<%# Eval("myValue") %>' />
ASPX.CS
protected void myGrid_ItemDataBound(object sender, GridItemEventArgs e)
{
if ((e.Item is GridEditableItem) && (e.Item.IsInEditMode))
{
GridEditableItem myItem = (GridEditableItem)e.Item;
TextBox myBox = (TextBox)myItem.FindControl("BoxILookFor");
string myID = myBox.ClientID.ToString();
myGrid.Controls.Add(new LiteralControl("<script type='text/javascript'>$('#" + myID + "').datepicker();</script>"));
}
}
但是现在我面临另一个问题,我的文本框(datepicker)保存了一个空字符串,而不是我选择的值(什么日期)。