C# 使用(DropDownList)e.Row.FindControl时,我将变为null

C# 使用(DropDownList)e.Row.FindControl时,我将变为null,c#,asp.net,gridview,C#,Asp.net,Gridview,这是我的代码,它给出了ddl=null的值: //event handler to bind the data to the row before rendering the gridview protected void gridview1_RowDataBound(object sender ,GridViewRowEventArgs e) { if ((e.Row.RowType == DataControlRowType.DataRow)&&(e.Row.Data

这是我的代码,它给出了ddl=null的值:

//event handler to bind the data to the row before rendering the gridview
protected void gridview1_RowDataBound(object sender ,GridViewRowEventArgs e)
{
    if ((e.Row.RowType == DataControlRowType.DataRow)&&(e.Row.DataItem!=null))
    {
        //DropDownList ddlNo = (DropDownList)e.Row.FindControl("ddlNo");
        DropDownList ddlNo = (DropDownList)e.Row.FindControl("ddlNo");

        if (ddlNo != null)
        {
            ddlNo.DataSource = Test.GetData();
            ddlNo.DataBind();
            ddlNo.SelectedValue = gridview1.DataKeys[e.Row.RowIndex].Values[0].ToString();//datakeys are used to retain the value of the no. in edit mode    
        }
    }
}
<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" AutoGenerateDeleteButton="false" AutoGenerateEditButton="false" ShowFooter="true" EmptyDataText="No data available." PagerStyle-HorizontalAlign="Right" AllowPaging="true" AllowSorting="true" GridLines="Vertical" Width="98%" EnableViewState="true" OnRowCancelingEdit="gridview1_RowCancelingEdit" OnRowDataBound="gridview1_RowDataBound" OnRowEditing="gridview1_RowEditing" OnRowUpdating="gridview1_RowUpdating" OnRowCommand="gridview1_RowCommand" OnRowDeleting="gridview1_RowDeleting" DataKeyNames="testID">
    <Columns>
        <asp:TemplateField HeaderText="Select" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblSelect" runat="server" Text="Select"></asp:Label>
                <%-- <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true" OnCheckedChanged="chkSelect_CheckChanged" />--%>
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="Left" />
        </asp:TemplateField>
        <asp:BoundField DataField="testID" HeaderText="SearchId" />
        <asp:TemplateField HeaderText="Name" HeaderStyle-HorizontalAlign="Left">
            <EditItemTemplate>
                <asp:TextBox ID="txtName" runat="server" Text='<%#Eval("testDesc") %>' />
            </EditItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtNewName" runat="server"></asp:TextBox>
            </FooterTemplate>
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Bind("testDesc") %>'></asp:Label>
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="Left" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="No." HeaderStyle-HorizontalAlign="Left">
            <EditItemTemplate>
                <asp:DropDownList ID="ddlNo" runat="server" DataTextField="testNo" DataValueField="testNo" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblNo" runat="server" Text='<%# Bind("testNo") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:DropDownList ID="ddlNewNo" runat="server" DataTextField="testNo" DataValueField="testNo">
                </asp:DropDownList>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Edit" ShowHeader="False">
            <EditItemTemplate>
                <asp:LinkButton ID="linkbt1" runat="server" CausesValidation="true" CommandName="Update" Text="Update">
                </asp:LinkButton>
                <asp:LinkButton ID="linkbt2" runat="server" CausesValidation="false" CommandName="Cancel" Text="Cancel"></asp:LinkButton>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="linkbt1" runat="server" CausesValidation="false" CommandName="Edit" Text="Edit">

                </asp:LinkButton>
            </ItemTemplate>
            <FooterTemplate>
                <asp:LinkButton ID="linkbt2" runat="server" CausesValidation="false" CommandName="AddNew" Text="AddNew">

                </asp:LinkButton>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:CommandField HeaderText="Delete" ShowDeleteButton="true" ShowHeader="true" />
    </Columns>
</asp:GridView>
这是我的aspx代码:

//event handler to bind the data to the row before rendering the gridview
protected void gridview1_RowDataBound(object sender ,GridViewRowEventArgs e)
{
    if ((e.Row.RowType == DataControlRowType.DataRow)&&(e.Row.DataItem!=null))
    {
        //DropDownList ddlNo = (DropDownList)e.Row.FindControl("ddlNo");
        DropDownList ddlNo = (DropDownList)e.Row.FindControl("ddlNo");

        if (ddlNo != null)
        {
            ddlNo.DataSource = Test.GetData();
            ddlNo.DataBind();
            ddlNo.SelectedValue = gridview1.DataKeys[e.Row.RowIndex].Values[0].ToString();//datakeys are used to retain the value of the no. in edit mode    
        }
    }
}
<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" AutoGenerateDeleteButton="false" AutoGenerateEditButton="false" ShowFooter="true" EmptyDataText="No data available." PagerStyle-HorizontalAlign="Right" AllowPaging="true" AllowSorting="true" GridLines="Vertical" Width="98%" EnableViewState="true" OnRowCancelingEdit="gridview1_RowCancelingEdit" OnRowDataBound="gridview1_RowDataBound" OnRowEditing="gridview1_RowEditing" OnRowUpdating="gridview1_RowUpdating" OnRowCommand="gridview1_RowCommand" OnRowDeleting="gridview1_RowDeleting" DataKeyNames="testID">
    <Columns>
        <asp:TemplateField HeaderText="Select" HeaderStyle-HorizontalAlign="Left">
            <ItemTemplate>
                <asp:Label ID="lblSelect" runat="server" Text="Select"></asp:Label>
                <%-- <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true" OnCheckedChanged="chkSelect_CheckChanged" />--%>
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="Left" />
        </asp:TemplateField>
        <asp:BoundField DataField="testID" HeaderText="SearchId" />
        <asp:TemplateField HeaderText="Name" HeaderStyle-HorizontalAlign="Left">
            <EditItemTemplate>
                <asp:TextBox ID="txtName" runat="server" Text='<%#Eval("testDesc") %>' />
            </EditItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtNewName" runat="server"></asp:TextBox>
            </FooterTemplate>
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Bind("testDesc") %>'></asp:Label>
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="Left" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="No." HeaderStyle-HorizontalAlign="Left">
            <EditItemTemplate>
                <asp:DropDownList ID="ddlNo" runat="server" DataTextField="testNo" DataValueField="testNo" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblNo" runat="server" Text='<%# Bind("testNo") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:DropDownList ID="ddlNewNo" runat="server" DataTextField="testNo" DataValueField="testNo">
                </asp:DropDownList>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Edit" ShowHeader="False">
            <EditItemTemplate>
                <asp:LinkButton ID="linkbt1" runat="server" CausesValidation="true" CommandName="Update" Text="Update">
                </asp:LinkButton>
                <asp:LinkButton ID="linkbt2" runat="server" CausesValidation="false" CommandName="Cancel" Text="Cancel"></asp:LinkButton>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="linkbt1" runat="server" CausesValidation="false" CommandName="Edit" Text="Edit">

                </asp:LinkButton>
            </ItemTemplate>
            <FooterTemplate>
                <asp:LinkButton ID="linkbt2" runat="server" CausesValidation="false" CommandName="AddNew" Text="AddNew">

                </asp:LinkButton>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:CommandField HeaderText="Delete" ShowDeleteButton="true" ShowHeader="true" />
    </Columns>
</asp:GridView>


有人能提供相关的解决方案吗?

您将ddl编号放在
页脚模板中,但您只在
中检查它(e.Row.RowType==DataControlRowType.DataRow)
将其更改为FooterRow,它应该会找到它

将上面的行更改为


如果(e.Row.RowType==DataControlRowType.Footer&&e.Row.DataItem!=null)

您将ddl号放入
页脚模板中,但您只在
中检查(e.Row.RowType==DataControlRowType.DataRow)
将其更改为FooterRow,它应该会找到它

将上面的行更改为

如果(e.Row.RowType==DataControlRowType.Footer&&e.Row.DataItem!=null)

' /> --%> “/>

                                        </EditItemTemplate>
                                        <ItemTemplate>
                                            <asp:Label ID="lblapp" runat="server" Text='<%# Eval("AppName") %>'></asp:Label>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:DropDownList ID="ddlAppFooter" class="SearchBoxRTD" runat="server" DataTextField="AppName"
                                                DataValueField="SNO">
                                            </asp:DropDownList>
                                        </FooterTemplate>
                                        <HeaderStyle HorizontalAlign="Left" />
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="TestType" HeaderStyle-Width="50">
                                        <EditItemTemplate>
                                            <asp:DropDownList ID="ddlTestTypeDataRow" class="SearchBoxRTD" runat="server" DataTextField="Testingtypedescription"
                                                DataValueField="TestingTypeID">
                                            </asp:DropDownList>
                                            <asp:HiddenField ID="hdnTesttype" runat="server" Value='<%# Bind("Testtype") %>' />
                                        </EditItemTemplate>
                                        <ItemTemplate>
                                            <asp:Label ID="lblTestType" runat="server" Text='<%# Eval("Testingtypedescription") %>'></asp:Label>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:DropDownList ID="ddlTestTypeFooter" class="SearchBoxRTD" runat="server" DataTextField="Testingtypedescription"
                                                DataValueField="TestingTypeID">
                                            </asp:DropDownList>
                                        </FooterTemplate>
                                        <HeaderStyle HorizontalAlign="Left" />
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Scenario Type" HeaderStyle-Width="50">
                                        <EditItemTemplate>
                                            <asp:DropDownList ID="ddlScenarioTypeDataRow" class="SearchBoxRTD" runat="server" DataTextField="ScenarioTypedescription"
                                                DataValueField="ScenarioTypeID">
                                            </asp:DropDownList>
                                            <asp:HiddenField ID="hdnScenariotype" runat="server" Value='<%# Bind("ScenarioTypeID") %>' />
                                        </EditItemTemplate>
                                        <ItemTemplate>
                                            <asp:Label ID="lblScenarioType" runat="server" Text='<%# Eval("ScenarioTypedescription") %>'></asp:Label>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:DropDownList ID="ddlScenarioTypeFooter" class="SearchBoxRTD" runat="server"
                                                DataTextField="ScenarioTypedescription" DataValueField="ScenarioTypeID">
                                            </asp:DropDownList>
                                        </FooterTemplate>
                                        <HeaderStyle HorizontalAlign="Left" />
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Scenario">
                                        <EditItemTemplate>
                                            <asp:TextBox ID="txtScenario" runat="server" Text='<%# Bind("Scenario") %>'></asp:TextBox>
                                            <asp:RequiredFieldValidator ID="RFDGEdUI" runat="server" Font-Bold="true" ErrorMessage="*"
                                                ControlToValidate="txtScenario" ValidationGroup="EditScenario"></asp:RequiredFieldValidator>
                                        </EditItemTemplate>
                                        <ItemTemplate>
                                            <asp:Label ID="LblScenario" runat="server" Text='<%# Bind("Scenario") %>' />
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:TextBox ID="txtfootScenario" runat="server"></asp:TextBox>
                                            <asp:RequiredFieldValidator ID="RFDGScenario" runat="server" Font-Bold="true" ErrorMessage="*"
                                                ControlToValidate="txtfootScenario" ValidationGroup="AddScenario"></asp:RequiredFieldValidator>
                                        </FooterTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Status">
                                        <EditItemTemplate>
                                            <asp:CheckBox ID="chkScenariostatus" runat="server" Checked='<%# Bind("Status") %>' />
                                        </EditItemTemplate>
                                        <ItemTemplate>
                                            <asp:Label ID="LblScenarioStatus" runat="server" Text='<%# Bind("Status") %>' />
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:CheckBox ID="chkScenariofooter" runat="server" />
                                        </FooterTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Edit" ShowHeader="False">
                                        <EditItemTemplate>
                                            <asp:LinkButton ID="lbkUpdateScenario" runat="server" ValidationGroup="EditScenario"
                                                CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton>
                                            <asp:LinkButton ID="lnkCancelScenario" runat="server" CausesValidation="False" CommandName="Cancel"
                                                Text="Cancel"></asp:LinkButton>
                                        </EditItemTemplate>
                                        <FooterTemplate>
                                            <asp:LinkButton ID="lnkAddScenario" runat="server" ValidationGroup="AddScenario"
                                                CausesValidation="True" CommandName="Insert" Text="Insert"></asp:LinkButton>
                                        </FooterTemplate>
                                        <ItemTemplate>
                                            <asp:LinkButton ID="lnkEditScenario" runat="server" CausesValidation="False" CommandName="Edit"
                                                Text="Edit"></asp:LinkButton>
                                        </ItemTemplate>
                                        <HeaderStyle HorizontalAlign="Left" />
                                    </asp:TemplateField>
                                </Columns>
                                <EmptyDataTemplate>
                                    No Applications available!
                                </EmptyDataTemplate>
                            </asp:GridView>

没有可用的应用程序!
--------------------------------CS--------------------------------------------------------

受保护的void grdScenario_RowDataBound(对象发送方,GridViewRowEventArgs e) { 尝试 { 数据