dポイントプレゼントキャンペーン実施中!

はじめまして
セバといいます。

VBでaspxを利用しシステムを開発していますが、
次のような現象が発生し困っています。

仕様
1.FormviewのItemTemplateに配置している「edit_Chage」ボタンで
FormviewをEditmodeに変更します。

2.FormviewのEditItemTemplateには「hello」ボタンを配置し、
ボタン押下時にjavascriptを起動します。

問題点
FormviewのFormView1_ModeChangedにてイベントを拾い、
「hello」ボタンにjavascriptを組み込もうとしていますが、
この時点では「hello」ボタンのインスタンスが生成おらず、

『オブジェクト参照がオブジェクト インスタンスに設定されていません。』

のエラーになってしまいます。

サンプルプログラム
///////////////////////////////

Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …

<html xmlns="​http://www.w3.org/1999/xhtml">
<head runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
<asp:FormView ID="FormView1" runat="server"
DataSourceID="SqlDataSource1">
<EditItemTemplate>
tmp1:
<asp:TextBox ID="tmp1TextBox" runat="server" Text='<%# Bind("tmp1") %>' />
<asp:Button ID="Button1" runat="server" Text="hello" />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="更新" />
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="キャンセル" />
</EditItemTemplate>
<InsertItemTemplate>
</InsertItemTemplate>
<ItemTemplate>
tmp1:
<asp:Label ID="tmp1Label" runat="server" Text='<%# Bind("tmp1") %>' />
<br />
<asp:Button ID="Button2" runat="server" CommandName="edit" Text="edit_Chage" />
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT [tmp1] FROM [tmpTBL]">
</asp:SqlDataSource>
</form>
</body>
</html>
///////////////////////////////
Default.aspx.vb
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub FormView1_ModeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.ModeChanged
'「Hello」ボタンへのjavascript組み込み
If FormView1.CurrentMode = FormViewMode.Edit Then
Dim btn As Button
btn = CType(FormView1.FindControl("Button1"), Button)
Dim sbScript As New System.Text.StringBuilder()
sbScript.Append("alert('Hello')")
btn.Attributes("onclick") = sbScript.ToString()
End If

End Sub
End Class

////////////////////////
また、
「Hello」ボタンのインスタンスを強制的に作ろうと、
Default.aspx.vbにFormView1.DataBind()を組み込みましたが、
インスタンスは生成されたものの、
onclickタグは生成されませんでした。

If FormView1.CurrentMode = FormViewMode.Edit Then
Dim btn As Button
FormView1.DataBind() <--- ここに追加
btn = CType(FormView1.FindControl("Button1"), Button)

EditItemTemplateに配置したボタンにプログラムでjavascriptを組み込みたいのですが、
どなたか解決方法をご存知な方がいましたら、ご教示願いします。

A 回答 (1件)

FormView1.ModeChangedのタイミングではなく、FormView1.PreRenderのタイミングで組み込んでみてはいかがでしょう?


おそらく、いけると思います。
    • good
    • 0
この回答へのお礼

tochansa様

回答ありがとうございます。

FormView1.PreRenderイベントに組み込んだ結果、
思い通りの振る舞いになりました。

PreRenderは、表示を開始する前に発生するイベントなんですね。

どうもありがとうございました。

お礼日時:2009/09/10 08:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!