【问题标题】:How to: Find a control ID in insert/edit mode of a Telerik RadGrid如何:在 Telerik RadGrid 的插入/编辑模式下查找控件 ID
【发布时间】:2014-08-27 13:11:30
【问题描述】:

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

【问题讨论】:

    标签: datepicker telerik jquery-ui-datepicker radgrid


    【解决方案1】:

    请尝试以下代码 sn-p。

    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);");
        }
    }
    

    如果有任何问题,请告诉我。

    【讨论】:

      【解决方案2】:

      我设法访问了控件,我不知道是不是我做的很糟糕,因为它很简单。

      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>"));
          }
      }
      

      但现在我面临另一个问题,我的文本框(日期选择器)保存了一个空字符串,而不是我选择的值(什么日期)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        相关资源
        最近更新 更多