C# gridview中的FindControl返回null
我目前处于一个两难境地,我的gridview没有返回一个标签,它位于detailsview中 我的C代码是:C# gridview中的FindControl返回null,c#,asp.net,gridview,C#,Asp.net,Gridview,我目前处于一个两难境地,我的gridview没有返回一个标签,它位于detailsview中 我的C代码是: protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { // get pet number for when removing a pet from reservation int numberSelected = -1; String numbertxt = "-1"
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
// get pet number for when removing a pet from reservation
int numberSelected = -1;
String numbertxt = "-1";
GridView gv1 = (GridView)sender;
GridViewRow rvRow = gv1.Rows[gv1.SelectedRow.RowIndex];
Label numberLbl = (Label)rvRow.Cells[0].FindControl("lblNumber");
// find selected index, and get number in column 0
// label within GridView1 within dvReservation DetailsView
numbertxt = numberLbl.Text;
...
Gridview:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="dsObjGet"
OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
<Columns>
<asp:TemplateField InsertVisible="False" ShowHeader="False">
<AlternatingItemTemplate>
<asp:Label ID="lblNumber" runat="server"
Text='<%# Eval("NUMBER") %>' Visible="False"></asp:Label>
</AlternatingItemTemplate>
<ItemTemplate>
<asp:Label ID="lblNumber" runat="server"
Text='<%# Eval("NUMBER") %>' Visible="False"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<AlternatingItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("NAME") %>'>
</asp:Label>
</AlternatingItemTemplate>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("NAME") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField SelectText="Remove" ShowSelectButton="True"
CausesValidation="False">
<ControlStyle CssClass="link" />
</asp:CommandField>
</Columns>
</asp:GridView>
标签显示为空数字BL
异常返回的消息为:
对象引用未设置为对象的实例
编辑:
如果我在带有EvalNUMBER的页面上的外部gridview中生成lblNumber,这似乎可以解决问题,尽管我不明白为什么它在我尝试使用的当前gridview中不起作用,因为GridView1位于DetailsView中。使用FindControl时不应该使用单元格集合。就用这个
GridView gv1 = (GridView)sender;
GridViewRow rvRow = gv1.SelectedRow;
Label numberLbl = (Label)rvRow.FindControl("lblNumber");
我试过你的答案,但没有一个是有效的。。。实际上,获取索引的异常超出范围。必须为非负数且小于集合的大小。这很奇怪——因为我在网格中有10行,我只点击了第2行或第3行,但它已经超出了范围……你认为发生了什么事?@bonCodigo:你能把它作为一个问题发布在SO中吗?给我看看你想要控件的标记和事件。我终于把它修好了。
GridView gv1 = (GridView)sender;
GridViewRow rvRow = gv1.SelectedRow;
Label numberLbl = (Label)rvRow.FindControl("lblNumber");