在aspnet gridview标头中添加服务器单击到动态asp按钮

时间:2015-03-03 18:41:21

标签: c# gridview dopostback

我必须在gridview标题中添加一个跨越两列的按钮。我在后面的代码中执行此操作:

        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>

我也试过传递eventhandler和CommandName。但是这些按钮的视图源中都没有显示这些内容。 任何方法我都会好的;在javascript函数上调用回发,或者直接调用服务器端单击例程,或者调用commandname grdiview函数。

1 个答案:

答案 0 :(得分:1)

模板字段还包含可以保存控件的页眉和页脚模板区域

<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>

<强>更新

现在因为按钮位于标题中,它自动连接到gridview,然后单击将触发可以在GridView RowCommand事件中捕获的RowCommand。处理CommandName并在后面的代码中调用所需的函数