Asp.net 在gridview中访问控件

Asp.net 在gridview中访问控件,asp.net,Asp.net,我正在尝试访问gridview中的控件,但运气不佳。我在互联网上搜索过,没有任何例子能帮助我。目前,我收到的错误消息是:“对象引用未设置为对象的实例”引用此行:lblErrors.Text=level.SelectedValue 以下是我的代码: protected void setRecruitmentSchoolLevel(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.

我正在尝试访问gridview中的控件,但运气不佳。我在互联网上搜索过,没有任何例子能帮助我。目前,我收到的错误消息是:“对象引用未设置为对象的实例”引用此行:lblErrors.Text=level.SelectedValue

以下是我的代码:

protected void setRecruitmentSchoolLevel(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        GridView recruitment = (GridView)sender;
        DropDownList level = (DropDownList)e.Row.FindControl("lstLevel");
        lblErrors.Text = level.SelectedValue;
    }
}
这是我的网站代码:

                        <asp:GridView ID="gridRecruitment" runat="server" DataSourceID="sourceRecruitment" Width="100%"
                        CellPadding="4" EnableModelValidation="True" ForeColor="#333333" OnRowDataBound="setRecruitmentSchoolLevel" 
                        GridLines="None" AutoGenerateColumns="False" AllowSorting="true" DataKeyNames="ID" EmptyDataText="No Recruitments">
                        <Columns>
                            <asp:HyperLinkField HeaderText="ID" DataTextField="ID" DataNavigateUrlFormatString="~/Admin/Recruit/recruit.aspx?ID={0}" DataNavigateURLFields="ID" Target="_blank" SortExpression="ID"/>
                            <asp:BoundField HeaderText="Class" DataField="GraduationYear" SortExpression="GraduationYear"/>
                            <asp:TemplateField HeaderText="Level" SortExpression="LevelName">
                                <ItemTemplate><%#Eval("LevelName") %></ItemTemplate>                                        
                                <EditItemTemplate>
                                    <asp:DropDownList ID="lstLevel" runat="server" DataSourceID="sourceLevels" DataTextField="Abbreviation" DataValueField="ID" SelectedValue='<%#Bind("Level") %>'/>
                                    <asp:SqlDataSource ID="sourceLevels" runat="server" ConnectionString="<%$ ConnectionStrings:DBCS %>" SelectCommand="SELECT Abbreviation, ID FROM Levels WHERE Recruiting = 'True' ORDER BY [Order] DESC"/>                                        
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:CommandField HeaderText="Commands" ShowEditButton="true" ShowDeleteButton="true" />
                        </Columns>
                    </asp:GridView>


看看这个问题的答案:。回答者谈到如何使用RowCreated和RowDataBound事件

我想你可以试试这样的

protected void gridRecruitment_RowEditing(object sender, GridViewEditEventArgs e)
{
  GridView recruitment = (GridView)sender;
  GridViewRow row= recruitment.Rows[e.NewEditIndex];

  DropDownList level = (DropDownList)row.FindControl("lstLevel");
  lblErrors.Text = level.SelectedValue;

}

我怀疑您能否在onrowdatabound事件中访问编辑模板。如果我没记错的话,在您真正开始编辑行之前,编辑模板根本不会呈现。谢谢。我必须使用行编辑事件吗?值得一试。我手头没有VS,也无法检查。