2009-08-17 130 views
4

私は、TemplateFieldにasp CheckBoxを持つGridViewを持っています。次のようにTemplateFieldが定義されていますGridViewでOnCheckedChangedイベントが発生しない

<asp:TemplateField HeaderText="HeaderName"> 
    <ItemTemplate> 
     <asp:CheckBox ID="checkBoxId" runat="server" OnCheckedChanged="MyCheckChangedMethod" AutoPostBack="true"/> 
    </ItemTemplate> 
</asp:TemplateField> 

私はMyCheckChangedMethod内部のブレークポイントで私のWebプロジェクトを実行し、何も起こりませんチェックボックスをクリックします。ブレークポイントはヒットしません。私のVisual Studioデバッガが動作しています。

さらに、私は手動でイベントをフックアップする必要はありませんので、私のページのdefnitionでAutoEventWireup = Trueを持っています。私は前にこのようにして問題を抱えたことはありません。私は同じページ設定のボタンをクリックイベントで正確に同じ方法で行い、ブレークポイントはそれでうまくいく。

アイデア?

答えて

4

コントロールのIDをマングリングするGridView内にあるため、チェックボックスコントロールのポストバックイベントは正しく発生しません。

データを反映するためにチェックボックスが必要な場合は、CheckBoxFieldオブジェクトを使用してその方法でバインドできます。

あなたはそれが行のためのアクションを実行する必要がある場合は、のCommandNameプロパティを使用してButtonField対象とRowCommandイベントを見てみたいことがあります。

access the checkboxes within the GridView server sideには方法があります。

0

試してみてください。

<asp:CheckBox ID="checkBoxId" runat="server" AutoPostBack=true OnCheckedChanged="MyCheckChangedMethod"/> 

はaspxページが一番上にCodeFile = "YOUR_FILE.aspx.cs" を持っていることを確認します。あなたの関数のMyCheckChangedMethodがオブジェクト送信者、EventArgsの電子を持っている必要があり

関数として定義されていることを

はまた、それに参照してください。

public void MyCheckChangedMethod(object sender, EventArgs e) 
{ 
    bool b = false;//your data here 
} 

また、web.configのデバッグがtrue(既に完了していると思われます)に設定されていることを確認してください。

+0

コードファイルはファイルのヘッダーにあります。私が下部に言ったように、私のボタンのクリックイベントはうまくいきます。GridView内のCheckBoxだけで問題が起こっています。また、あなたが提案したコードは、私のチェックボックスが上で定義されている方法とまったく同じです。メソッドは、オブジェクトとEventArgsで適切なメソッドシグネチャを使用して正しく定義されます。これが問題がとてもイライラしている理由です。私はASP.netマークアップでイベントを設定する方法を知っています – Adam

+0

ただの提案でした。私はコード自分の(グリッドビューを実行しない)コードを試してみました。関数に何らかのコードが含まれているのか、それとも空ですか? –

6

asp:CheckBoxタグにAutoPostback = Trueを追加する必要があります。

5

コントロールイベントが発生する前にDataBindが呼び出されたときに問題が発生します。 Page_LoadDataBindを呼び出す場合は、 if (!isPostBack) {}に入力し、イベントハンドラ自体でDataBindを呼び出します。

関連する問題