1

ユーザーコントロールから親に戻して発生させたい2つのイベントがあります。「UserSelected」および「NoUsersSelected」

1 つはユーザーが選択されたときに発生し、もう 1 つはすべてのユーザーが削除されたときに発生します。

私の問題は、「UserSelected」が機能することですが、「NoUsersSelected」が失敗することです...以下のコード スニペットで、失敗する行にコメントを付けました。

更新: 最初のイベント ハンドラーに関連するすべてのコードをコメントすると、2 番目のイベント ハンドラーが機能し始めます。

これが私の子(ユーザー)コントロールのコードです:

    public event EventHandler UserSelected;
    public event EventHandler NoUsersSelected;

    protected virtual void onUserSelected(System.EventArgs e)
        {
            if (UserSelected != null) UserSelected(this, e);
        }

    protected virtual void onNoUsersSelected(System.EventArgs e)
        {

**###** PROBLEM ! - NoUsersSelected is always null so doesn't fire event **###**
            if (NoUsersSelected != null) NoUsersSelected(this, e);
        }

イベントを発生させるには、GridView TemplateField 内のボタンを使用します。

<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="btnSelect" CommandArgument='<%# Eval("UserID") %>' CommandName="SelectUser" ToolTip="Select User" runat="server" UseSubmitBehavior="false" CssClass="GridBtn_Select" CausesValidation="false" />
    </ItemTemplate>
</asp:TemplateField>

<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="btnDelete" CommandArgument='<%# Eval("UserID") %>' CommandName="DeleteUser" ToolTip="Delete User" runat="server" OnClientClick="javascript:if(!confirm('Are you sure?')) return false;" UseSubmitBehavior="false" CssClass="GridBtn_Delete" CausesValidation="false" />
    </ItemTemplate>
</asp:TemplateField>

これらのボタンのコード ビハインドは次のとおりです。

if (e.CommandName == "SelectUser")
        {onUserSelected(System.EventArgs.Empty);}

と...

if (e.CommandName == "DeleteUser")
        { //this is where I remove the user from the grid...

            if (gridUsers.Rows.Count < 1)
                {onNoUsersSelected(System.EventArgs.Empty);}

.

ユーザー コントロールをホストする親ページで:

protected void Page_Load(object sender, EventArgs e)
        {
            //Bind to the event on child control
            GridAdvertiserUsers.UserSelected += UserSelected_EventHandler;
            GridAdvertiserUsers.NoUsersSelected += NoUsersLinked_EventHandler;
}

イベントが呼び出す関数:

  void UserSelected_EventHandler(object sender, EventArgs e)
        { //do stuff here }

  void NoUsersLinked_EventHandler(object sender, EventArgs e)
        { //Do other stuff }

アップデート:

onUserSelected が呼び出されると、両方のイベントのメソッドが正しく配線されているように見えます onUserSelected が呼び出されると、両方のイベントのメソッドが正しく配線されているように見えます

しかし、onNoUserSelected が呼び出されると、両方とも null になります。 onNoUserSelected が呼び出されると、両方とも null です

4

0 に答える 0