0

DetailsviewコントロールのEditItemTemplate要素内のコントロールのClientID/UniqueIDを取得する方法と、DetailsViewsが編集モードに変更されてDetailsViewがAJAXUpdatePanel内にある場合を知りたいです。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にはチェックボックスコントロールが含まれています。したがって、Detailsviewが編集モードに変更されているときにこのチェックボックスのClientIDを取得しようとしています。Javascriptを処理するためにこの値が必要です。

イベントChangingMode/ChangedModeのキャッチは機能しません。chkboxがnullです:

 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 "); //<==はnullです}

太字のテキストはタイプミスですか?

DetailsViewをあまり使用していませんが、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 に答える