如何:在Telerik RadGrid的插入/编辑模式下查找控件ID

时间:2014-08-27 13:11:30

标签: datepicker telerik jquery-ui-datepicker radgrid

我有一个应用程序是在我开始工作之前开发的,而datepickers是自定义的。我们最近迁移到Windows 8,自定义日期选择器不再工作。所以我开始为jquery-ui datepicker更改它们,一切都像我期待的那样。但现在我遇到了一个问题。其中一些自定义日期选择器处于Telerik RadGrid的编辑/插入模式。我的jquery-ui datepicker弹出窗口,当文本框使用控件的id获得焦点时使用一些java脚本。我没有问题使新控件出现在编辑/插入模式中,其中包含正确的值。我的问题是,当控件获得焦点时,我无法找到RadGrid的编辑/插入模式的控件ID以弹出datepicker。任何帮助将不胜感激。

2 个答案:

答案 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)保存了一个空字符串,而不是我选择的值(什么日期)。