0

グリッドビューがオンになっている ASP ページがあります。また、バインドされた各行に clientscript を追加して、マウス オーバー/アウトで強調表示/非強調表示を行いました。テンプレート フィールドとして asp:button を追加し、値を CommandArgument にバインドしました。IE と FIrefox では、CommandName が _RowCommand イベントに渡されるという期待どおりの動作が得られます。ただし、Safari では、RowCommand に渡された「Select」の CommanName しか表示されません。

予想される動作は、バインドされた行がクリックされると、"Select" パラメータが RowCommand イベントに渡されることです。行のボタンをクリックすると、引数「削除」が渡されます。

protected void gvContacts_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes.Add("onMouseOver", "Highlight(this)");
        e.Row.Attributes.Add("onMouseOut", "UnHighlight(this)");

        e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(gvContacts, "Select$" + e.Row.RowIndex);

        e.Row.Attributes["style"] = "cursor:pointer";
    }
}


protected void gvContacts_RowCommand(object sender, GridViewCommandEventArgs e)
{                

    switch (e.CommandName)  //Always "Select" when browser is Safari.  
    {
        case "Select":
            Session["clientID"] = gvContacts.Rows[Convert.ToInt32(e.CommandArgument)].Cells[0].Text;
            Response.Redirect("../Contacts/ContactEdit.aspx?readin=1");
            break;
        case "Remove":
            //Remove the client from the list
            Company company = new Company();
            company.Get(Int32.Parse(Session["CompanyID"].ToString()), ((Model)Session["model"]).ConnectionString);
            company.RemoveUser(Int32.Parse(e.CommandArgument.ToString()));
            BindGrid(company.ID);
            break;
    }                
}

itemtemplate の HTML

<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="btnRemove" runat="server" Text="Remove" CommandName="Remove" OnClientClick="return confirmRemove();"
                                    CommandArgument='<%# Eval("ID") %>' />
   </ItemTemplate>

任意の考えをいただければ幸いです。ありがとう

4

1 に答える 1