.NET Framework 3.5 で導入されているListViewはいいですよ。

ところで、その中でASP.NET AJAXのxxExtenderをどう使ったらよいか、ちょっと悩みました。
結論は簡単で、ItemTemplateの中(とか要は明細の中)に入れてあげればよいということでした。
同様のことはほかにもあって、同じくASP.NET AJAXのTabPanelの中でExtenderを使う場合もPanelの中に置いてあげるとよいです。

が、どこかで質問しようと思って質問文まで書いたので、そのまま載せておきます。

その他の余談として、Visual Studio 2008 RTM 登場に合わせて、ASP.NET AJAX Control Toolkitもアップデートされています。
http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=8513
βで使っていたものは使えないので注意が必要です。一緒にダウンロードしておくべきです。

というわけで、Let’s enjoy Visual Studio 2008 !

お世話になります。

ListView内の各行でPopupControlExtenderを使用することはできないでしょうか?

例えば、ListView1のitemtemplateの中にTextBox1を配置し、Load時等に下記処理を行えばできるのではと試してみましたがコントロールが見つからないという下のエラーが発生しました。
ItemDataBoundで同様の記述しても同じエラーとなります。
もちろん通常通りaspxファイル側で記述しようとしてもエラーになります。

環境は、現在はMicrosoft Visual Studio Team System 2008 Test Edition・AjaxControlToolkit-Framework3.5の11119、その前の2008βでも同様でした。
ExtenderはExtender側でTargetControlIDを指定するので、ListViewやGridViewの明細内の項目に適用するのは確かに難しそうですが、うまく使える方法はないでしょうか?

For Each itm As ListViewDataItem In ListView1.Items
    If itm.ItemType = ListViewItemType.DataItem Then

        Dim popEx As New AjaxControlToolkit.PopupControlExtender
        Dim tx As TextBox = itm.FindControl(“TextBox1”)
        popEx.TargetControlID = tx.ClientID
        popEx.PopupControlID = Me.PanelManageTag.ClientID
        popEx.Position = AjaxControlToolkit.PopupControlPopupPosition.Bottom
        Me.Controls.Add(popEx)

    End If

Next

The TargetControlID of ” is not valid. A control with ID ‘ctl00_ContentPlaceHolder1_ListView1_ctrl0_TextBox1’ could not be found.

[InvalidOperationException: The TargetControlID of ” is not valid. A control with ID ‘ctl00_ContentPlaceHolder1_ListView1_ctrl0_TextBox1’ could not be found.]
   System.Web.UI.ExtenderControl.RegisterWithScriptManager() +366
   System.Web.UI.ExtenderControl.OnPreRender(EventArgs e) +36
   AjaxControlToolkit.ExtenderControlBase.OnPreRender(EventArgs e) in C:\Users\…
   AjaxControlToolkit.PopupControlExtender.OnPreRender(EventArgs e) in C:\Users\…
   System.Web.UI.Control.PreRenderRecursiveInternal() +174
   System.Web.UI.Control.PreRenderRecursiveInternal() +259
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4483