将服务器点击添加到 aspnet gridview header 中的动态 asp 按钮

Adding server click to dynamic asp button in aspnet gridview header

我必须在 gridview header 中添加一个跨越两列的按钮。我在后面的代码中这样做:

        if (e.Row.RowType == DataControlRowType.Header)
        {
            GridView HeaderGrid = (GridView)sender;
            GridViewRow HeaderGridRow =
            new GridViewRow(0, 0, DataControlRowType.Header,
            DataControlRowState.Insert);  
            TableCell HeaderCell = new TableCell(); 
            HeaderCell.Text = "Name of Person";
            HeaderCell.Font.Bold = true;
            HeaderCell.ColumnSpan = 1;
            HeaderGridRow.Cells.Add(HeaderCell);
            HeaderCell = new TableCell();

            Button btnHeader = new Button();
            btnHeader.UseSubmitBehavior = false;
            btnHeader.Click += new EventHandler(this.btnsubmitentry_Click);
            btnHeader.Text = "Add New Task";
            btnHeader.CommandName = "AddNewTask";
            //  OnClick="btnsubmitentry_Click"
            btnHeader.CssClass = "btn btn-lg btn-default";
            btnHeader.OnClientClick = "AddNewTask();";
            HeaderCell.Controls.Add(btnHeader);
            HeaderCell.ColumnSpan = 2;
            HeaderGridRow.Cells.Add(HeaderCell);

            grdViewSummary.Controls[0].Controls.AddAt(0, HeaderGridRow);
        }

这会生成一个不错的按钮,但是我需要有关如何调用服务器端按钮单击事件的帮助。

<input type="button" name="grdViewSummary$ctl01$ctl00" value="Add New Task" onclick="AddNewTask();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;grdViewSummary$ctl01$ctl00&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))" class="btn btn-lg btn-default"   />

如您所见,我将 onClientClick 传递给具有回发代码的 javascript 函数,但事件未被触发。

<script type="text/javascript">
    function AddNewTask() {
        alert();
        __doPostBack('btnsubmitentry_Click','')
    }
</script>

我也试过传入事件处理程序和 CommandName。但是其中的 none 显示在相关按钮的视图源中。 我会接受任何方法;在 javascript 函数上调用回发,或者直接调用服务器端单击例程,或者调用 commandname grdiview 函数。

模板字段还包含 Header 和可以容纳控件的页脚模板区域

<asp:TemplateField HeaderText="Name Of Person" SortExpression="parent">
    <HeaderTemplate>
        <asp:Button ID="btnHeader" runat="server" 
             OnClientClick="AddNewTask()"     <-- this is not needed see update below
             CommandName="AddNewTask"
             CssClass="btn btn-lg btn-default"
             Text="Add New Task" 
             UseSubmitBehavior="false" />
    </HeaderTemplate>
    <HeaderStyle Font-Bold="true" />
    <EditItemTemplate>
        <asp:TextBox ID="" runat="server" Text='<%# Bind(...)%>' ></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="" runat="server" Text='<%# Bind(...)%>'></asp:Label>
    </ItemTemplate>
    <FooterTemplate>
    </FooterTemplate>
</asp:TemplateField>

更新

现在,因为按钮在 header 中,所以它会自动连接到 gridview,并且在单击时会触发一个可以在 GridView RowCommand 事件中捕获的 RowCommand。处理CommandName,在后面的代码中调用你需要的函数