将服务器点击添加到 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("grdViewSummary$ctl01$ctl00", "", true, "", "", 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,在后面的代码中调用你需要的函数
我必须在 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("grdViewSummary$ctl01$ctl00", "", true, "", "", 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,在后面的代码中调用你需要的函数