我觉得我在这里遗漏了一些明显的东西,但我还没有得到它。我有一个带有模板字段列的gridview,其中有一个按钮和一个隐藏字段。我试图获取行数据绑定上的按钮和隐藏字段的引用,因为按钮的标签和命令参数等都会根据其他行数据而变化。
如果我在下面的代码中指示的区域放置一个断点,我可以看到隐藏的字段被正确分配,但按钮不是。我在这里缺少什么?
GridView.aspx
<asp:GridView ID="gvCurrentQueueStatus" runat="server" AutoGenerateColumns="False"
OnRowDataBound="gvCurrentQueueStatus_RowDataBound">
<Columns>
<asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Service Controls">
<ItemTemplate>
<asp:Button ID="btnSubmitCommand" runat="server" Text="Control" OnClick="btnSubmitCommand_Click" />
<asp:HiddenField ID="hdnQueueNumber" runat="server" Value='<%# Eval("ReportQueueNumber") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
GridView.aspx.cs
protected void gvCurrentQueueStatus_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Button controlButton = (Button)e.Row.FindControl("btnSubmitCommand"); // FindControl fails
HiddenField hdnQueueNumber = (HiddenField)e.Row.FindControl("hdnQueueNumber"); // FindControl succeeds
// Other stuff
} // breakpoint here, successfully finds htnQueueNumber, but not btnSubmitCommand
}
答案 0 :(得分:1)
试试这个:
Button controlButton = e.Row.FindControl("btnSubmitCommand") as Button ;
或者尝试这种方式:
foreach (GridViewRow row in gvCurrentQueueStatus.Rows) {
Button controlButton = (Button)gvCurrentQueueStatus.Rows[row.RowIndex].FindControl("btnSubmitCommand");
}
答案 1 :(得分:0)
所以显然我的按钮实际上被正确分配了,当我在调试器中调用变量时,它只是没有报告。
我实际上并不疯狂,但Visual Studio的调试器却需要旧的“你试过把它关掉再打开”。
对那些帮助调查我的问题的人表示抱歉:3