0

我想知道如何在 Detailsview 控件 EditItemTemplate 元素中获取控件的 ClientID/UniqueID 以及何时将 DetailsViews 更改为编辑模式并且 DetailsView 在 AJAX UpdatePanel 内。如果没有 UpdatePanel,在 PostBack 期间我可以获得 ClientID 的控制权,但现在有了 UpdatePanel。

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1" AllowPaging="true" AutoGenerateEditButton="true">
                <Fields>
                    <asp:TemplateField>
                        <EditItemTemplate>
                            <asp:CheckBox runat="server" ID="chkboxTest" Text="CHECKBOX" />
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Fields>
            </asp:DetailsView>
        </ContentTemplate>
    </asp:UpdatePanel>

如您所见,EditItemTemplate 包含一个 Checkbox 控件。因此,当 Detailsview 更改为编辑模式时,我试图获取此复选框的 ClientID。我需要这个值来处理 Javascript。

捕捉事件ChangingMode/ChangedMode 不起作用;chkbox 为空:

 void DetailsView1_ModeChanged(object sender, EventArgs e)
    {
        if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
        {
            var chkbox = DetailsView1.FindControl("chkboxTest"); // <==  is null
        }
    }

也许我使用了错误的事件?有人可以给我一个提示吗?谢谢。

4

2 回答 2

2

好的,最好的办法是为OnDataBound实现一个处理程序,然后执行以下操作:

  protected void databound(object sender, EventArgs e)
  {
     if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
     {
        var control = DetailsView1.Rows[0].Cells[1].FindControl("chkboxTest");
        if (control != null)
        {
           // Write some JS...
        }
     }
  }
于 2010-05-26T11:11:36.833 回答
0

void DetailsView1_ModeChanged(object sender, EventArgs e) { if (DetailsView1.CurrentMode == DetailsViewMode.Edit) var chkbox = DetailsView1.Rows[0].FindControl(" chkxboxTest "); // <== 为空 }

加粗的文字是错字吗?

我没有太多使用 DetailsView 但使 usre Rows[0] 不是标题行,并且行下是否有任何单元格?像 GridView 一样。

更新:我假设您想要做的就是在用户更新项目后捕获控件?将事件处理程序分配给 OnItemUpdating 并尝试以下操作:

protected void updating(object sender, DetailsViewUpdateEventArgs e)
{
   var control = DetailsView1.Rows[int.Parse(e.CommandArgument.ToString())].Cells[1].FindControl("chkboxTest");
}
于 2010-05-26T08:26:06.940 回答