我也有同样的问题(之所以会出现此错误,是因为您的LinkButton位于GridView内部,在GridView外部不会触发),并通过以下步骤修复了此问题:
步骤1:
在GridView中添加RowCommand事件:
<asp:GridView ID="gvCostBreakdown" OnRowCommand="gvCostBreakdown_RowCommand" ...
第2步:
在GridView中的LinkButton中添加CommandName属性:
<asp:LinkButton ID="btnAddRow" CommandName="AddRow" ...
步骤3:
去除
UpdateMode="Conditional" ChildrenAsTriggers="true"
在第一个UpdatePanel中(
upSectionB
)将ControlID设为
gvCostBreakdown
和EventName为
RowCommand
属于
<Triggers>
:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="gvCostBreakdown" EventName="RowCommand" />
</Triggers>
步骤4:
最后,在RowCommand事件中,从GridView行设置文本框值:
// Getting GridView row which clicked
GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
// Check if LinkButton (AddRow) is clicked
if (e.CommandName=="AddRow")
{
// getting the value of label inside GridView
string rowCellValue = ((Label)row.FindControl("Label1")).Text;
// setting value to TextBox which is inside First UpdatePanel
txtTotal.Text = rowCellValue;
}
请参见下面的完整示例:
代码隐藏:
DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
// adding dummy data into DataTable
if (dt.Rows.Count == 0)
{
dt.Columns.Add("Column1");
dt.Rows.Add("Row1");
dt.Rows.Add("Row2");
}
if (!IsPostBack)
{
// setting and binding DataTable to GridView
gvCostBreakdown.DataSource = dt;
gvCostBreakdown.DataBind();
}
}
protected void gvCostBreakdown_RowCommand(object sender, GridViewCommandEventArgs e)
{
// Getting GridView row which clicked
GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
// Check if LinkButton (AddRow) is clicked
if (e.CommandName=="AddRow")
{
// getting the value of label inside GridView
string rowCellValue = ((Label)row.FindControl("Label1")).Text;
// setting value to TextBox which is inside First UpdatePanel
txtTotal.Text = rowCellValue;
}
}
。Aspx代码:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="upSectionB" runat="server">
<ContentTemplate>
TextBox:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /><br />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="gvCostBreakdown" EventName="RowCommand" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upSectionC" runat="server">
<ContentTemplate>
GridView: </b>
<asp:GridView ID="gvCostBreakdown" runat="server" OnRowCommand="gvCostBreakdown_RowCommand" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Column1">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Column1") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Column2">
<ItemTemplate>
<asp:LinkButton ID="btnAddRow" CommandName="AddRow" runat="server">Add Row</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
。GIF图像演示: