各位:
   请教一个GridView RowCommond事件的问题
背景:我在GridView中增加了一个模板列,里面增加了一个按钮
问题:
1.如果我增加的控件为Button,则无法触发RowCommond事件,为什么?
2.如果增加的控件为LinkButton,则可以触发RowCommond事件,但是无法执行RowCommond事件中的Page.ClientScript.RegisterStartupScript,JS无效代码如下(GridView中已经增加了RowCommon的事件调用):
aspx端代码:
onrowcommand="GridReportList_RowCommand"<asp:TemplateField HeaderText="操作" ShowHeader="False">
                                          <ItemTemplate>
                                            <asp:LinkButton ID="btnRowConfirm" runat="server" Text="结果确认" CommandName="ConfirmResult"/>
                                          </ItemTemplate>
                                          <ItemStyle HorizontalAlign="Center" />
                                     </asp:TemplateField>CS端代码:
protected void GridReportList_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "ConfirmResult")
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "myscript", "alert('ddddd');", true);
        }
    }

解决方案 »

  1.   

     protected void GridReportList_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandSource.GetType() == typeof(LinkButton) && e.CommandName == "ConfirmResult")
                {
                    this.ClientScript.RegisterStartupScript(GetType(), "", "<script>alert('ddddd');</script>");
                }
            }
      

  2.   

    this.ClientScript.RegisterStartupScript(GetType(), "", "<script>alert('ddddd');</script>");
    这句话,我单步调试是可以运行的,只是没有出现结果。
      

  3.   

    有,用的AJAX控件
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                             <ContentTemplate>
                                 <asp:Timer ID="Timer1" runat="server" Interval="120000">
                                 </asp:Timer>
                                 <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" CombineScripts="false">
                                 </asp:ToolkitScriptManager>
                                 <asp:GridView ID="GridReportList" runat="server" AutoGenerateColumns="False" 
                                     BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" 
                                     CellPadding="3" 
                                     DataKeyNames="EQPID,BUYOFFRESULT,BUYOFFSTARTTIME,BUYOFFENDTIME,LOTID,ALUMINIUMTHICKNESS,FLAG,WIRE" 
                                     OnRowCreated="GridReportList_RowCreated" 
                                     Width="100%" onrowdatabound="GridReportList_RowDataBound"  
                                     AllowSorting="True" onsorting="GridReportList_Sorting" 
                                     onrowcommand="GridReportList_RowCommand">
                                     <FooterStyle BackColor="White" ForeColor="Black" />
                                     <RowStyle BackColor="#F8F8F8" />
                                     <PagerStyle BackColor="#F8F8F8" ForeColor="Red" HorizontalAlign="Left" />
                                     <SelectedRowStyle CssClass="mover" />
                                     <HeaderStyle CssClass="toptrbg" />
                                     <AlternatingRowStyle BackColor="White" />
                                     <Columns>
                                         <asp:BoundField DataField="EQPID" HeaderText="设备号"   SortExpression="EQPID">
                                             <ItemStyle HorizontalAlign="Center" />
                                         </asp:BoundField>
                                         <asp:BoundField DataField="LOTID" HeaderText="批号" SortExpression="LOTID">
                                             <ItemStyle HorizontalAlign="Center" />
                                         </asp:BoundField>
                                         <asp:BoundField DataField="BUYOFFRESULT" HeaderText="Buy Off结果"   SortExpression="BUYOFFRESULT">
                                             <ItemStyle HorizontalAlign="Center" />
                                         </asp:BoundField>
                                         <asp:BoundField DataField="BUYOFFSTARTTIME" HeaderText="Buy Off开始时间" SortExpression="BUYOFFSTARTTIME">
                                             <ItemStyle HorizontalAlign="Center" />
                                         </asp:BoundField>
                                         <asp:BoundField DataField="BUYOFFENDTIME" HeaderText="Buy Off结束" SortExpression="BUYOFFENDTIME">
                                             <ItemStyle HorizontalAlign="Center" />
                                         </asp:BoundField>
                                         
                                         <asp:TemplateField HeaderText="操作" ShowHeader="False">
                                              <ItemTemplate>
                                                <asp:LinkButton ID="btnRowConfirm" runat="server" Text="结果确认" CommandName="ConfirmResult"/>
                                              </ItemTemplate>
                                              <ItemStyle HorizontalAlign="Center" />
                                         </asp:TemplateField>                                     
                                     </Columns>
                                 </asp:GridView>
                          </ContentTemplate>
                         </asp:UpdatePanel>
      

  4.   

    我用的IE6和360,会不会是用了AJAX控件的问题?但是除开GridView之外的按钮触发后都可以执行的
    例如下面这句就可以执行
    protected void btnresultaffirm_Click(object sender, EventArgs e)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "myscript", "showdiv('');", true);
                }
      

  5.   

    页面上有很多控件,不止一个GridView,现在是GridView中的按钮无法触发Page.ClientScript.RegisterStartupScript
      

  6.   

     Page.ClientScript.RegisterStartupScript(this.GetType(), "myscript", "<script>showdiv('');</script>", true);
    这样看行不行。
      

  7.   

    是updatepanel 的关系用ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "alertScript", "alert('ddddd');",  true);
      

  8.   


    厉害!没错,OK了,THKS
    这个帖子还有一个问题:如果我增加的控件为Button,则无法触发RowCommond事件,为什么?
      

  9.   

    也就是模板中用Button控件,触发不了RowCommond
    <asp:TemplateField HeaderText="操作" ShowHeader="False">
                                              <ItemTemplate>
                                                <asp:Button ID="btnRowConfirm" runat="server" Text="结果确认" CommandName="ConfirmResult"/>
                                              </ItemTemplate>
                                              <ItemStyle HorizontalAlign="Center" />
                                         </asp:TemplateField>
      

  10.   

    你可以这样写:
    前台:<asp:TemplateField HeaderText="删除">
                    <ItemTemplate>
                        <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/post_button_delete.gif" OnClientClick="javascript:return confirm('确实要删除吗?')" CommandName="MyDelete"  CommandArgument='<%#Eval("ID") %>' />
                    </ItemTemplate>
                </asp:TemplateField>后台在RowCommand事件中这样写:protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "MyDelete")
            {
                string ID = e.CommandArgument.ToString();
                sqlString = "delete from tb_Standard where ID='" + ID + "'";
                if (dp.updateData(sqlString) > 0)
                {
                    Response.Write("<script> alert('删除成功!');window.location.href='StandardM.aspx' </script>");
                }
                else
                {
                    Response.Write("<script> alert('删除失败!') </script>");
                }
                GridView1.DataBind();
            }
        }基本上就没什么问题了,你可以试一下