C# formview控件在面板内单击“不可用”

C# formview控件在面板内单击“不可用”,c#,asp.net,panel,formview,C#,Asp.net,Panel,Formview,***-编辑-已解决-*** 将onclick逻辑移动到forms databound事件 我在面板中有一个formview控件。btn_addDropBoxReportDetail_Click事件使包含my formview的面板可见。然后我在表单中找到我想要的控件,并动态地默认其中一些控件的值 现在,我第一次单击btn_addDropBoxReportDetail_单击它就可以了。但是,一旦我单击btn\u addDropBoxReportDetail Done\u单击隐藏面板,然后单击b

***-编辑-已解决-*** 将onclick逻辑移动到forms databound事件


我在面板中有一个formview控件。btn_addDropBoxReportDetail_Click事件使包含my formview的面板可见。然后我在表单中找到我想要的控件,并动态地默认其中一些控件的值

现在,我第一次单击btn_addDropBoxReportDetail_单击它就可以了。但是,一旦我单击btn\u addDropBoxReportDetail Done\u单击隐藏面板,然后单击btn\u addDropBoxReportDetail\u单击,似乎它并没有等待面板变为可见

编辑:我得到一个NullReferenceException未被用户代码处理。对象引用未设置为fvAddDropBoxReportDetail.FindControl上对象的实例

EDIT2:调试期间输入的值为- Label lblState=(Label)fv_DropboxReport.FindControl(“lblState”);={Text=“WA”} ddlSourceStateAdd.SelectedIndex=ddlSourceStateAdd.Items.IndexOf(ddlSourceStateAdd.Items.FindByText(lblState.Text));=={57} ---调试模式显示第一次找到控件并正确传递值。一切都很好,直到我点击完成按钮,然后点击添加按钮

一旦面板变得可见并显示表单,它应该在表单中找到控件,并使用这行代码默认从lblState.Text获得的所选值 ddlSourceStateAdd.SelectedIndex=ddlSourceStateAdd.Items.IndexOf(ddlSourceStateAdd.Items.FindByText(lblState.Text))

表单在什么时候变得可见,以便我可以找到控件?还是有不同的问题?我想了解解决方案时发生的情况以及获得帮助

<asp:Panel ID="pnlDropBoxDetailReportForm" runat="server" Visible="false">
                            <asp:FormView ID="fvAddDropBoxReportDetail" runat="server" SkinID="annualReportFormview"
                                HeaderText="Selected Drop Box Report Detail" DataKeyNames="DropBoxReportDetailId" DefaultMode="Insert"
                                DataSourceID="odsDropBoxReportDetail" OnDataBound="fvAddDropBoxReportDetail_DataBound"
                                OnItemCommand="fvAddDropBoxReportDetail_ItemCommand" OnItemInserted="fvAddDropBoxReportDetail_ItemInserted"
                                OnItemUpdated="fvAddDropBoxReportDetail_ItemUpdated" OnItemDeleted="fvAddDropBoxReportDetail_ItemDeleted">
                               <InsertItemTemplate>
                                   County<br />
                                                <asp:DropDownList ID="ddlSourceCountyAdd" runat="server" DataSourceID="odsCounty"
                                                    DataTextField="CountyName" DataValueField="CountyId">
                                                </asp:DropDownList>
                                            <br />State<br />
                                                <asp:DropDownList ID="ddlSourceStateAdd" runat="server" DataSourceID="odsState"
                                                    DataTextField="StateCode" DataValueField="StateCode" SelectedValue='<%# Bind("StateCode") %>'>
                                                </asp:DropDownList>
                                </InsertTemplate>
                          </FormView>
     </Panel>

那么到底是什么问题呢?你有错误吗?哪些代码行没有按预期工作?我很抱歉!我在脑海中写道,我得到的对象引用没有设置为表单控件上对象的实例。我在上面做了编辑,没问题。我在
fvAddDropBoxReportDetail
中没有看到
ddlSourceCountyAdd
ddlSourceStateAdd
,但您仍在尝试查找它们。你应该找别的地方吗?废话!为了简单起见,我删除了不需要的代码,并删除了错误的部分。我又做了一次编辑/好吧,我很好奇你说的错误,以及你说的那句话。什么实际上是空的?它不能是
fvAddDropBoxReportDetail
,因为在这一行之前会有一个错误。如果它找不到DropDownList,它只会返回null,而不是error。那么,您得到的完整错误是什么?它发生在哪一行?
protected void btn_addDropBoxReportDetail_Click(object sender, EventArgs e)
    {
        fvAddDropBoxReportDetail.ChangeMode(FormViewMode.Insert);
        pnlDropBoxDetailReportForm.Visible = true;
        btn_addDropBoxDetailReport.Visible = false;
        btn_addDropBoxDetailReportDone.Visible = true;
        ValidationSummaryDropBoxReportDetail.ValidationGroup = "DropBoxReportDetail";
        gvDropBoxReportDetail.Columns[0].Visible = false;

        if (pnlDropBoxDetailReportForm.Visible == true && fvAddDropBoxReportDetail.CurrentMode != FormViewMode.ReadOnly)
        {
            DropDownList ddlSourceCountyAdd = (DropDownList)fvAddDropBoxReportDetail.FindControl("ddlSourceCountyAdd");
            DropDownList ddlSourceStateAdd = (DropDownList)fvAddDropBoxReportDetail.FindControl("ddlSourceStateAdd");

            Label lblState = (Label)fv_DropboxReport.FindControl("lblState");
            ddlSourceStateAdd.SelectedIndex = ddlSourceStateAdd.Items.IndexOf(ddlSourceStateAdd.Items.FindByText(lblState.Text));

            Label lblCounty = (Label)fv_DropboxReport.FindControl("lblCounty");
            ddlSourceCountyAdd.SelectedIndex = ddlSourceCountyAdd.Items.IndexOf(ddlSourceCountyAdd.Items.FindByText(lblCounty.Text));
        }

    }
    protected void btn_addDropBoxReportDetailDone_Click(object sender, EventArgs e)
    {
        fvAddDropBoxReportDetail.ChangeMode(FormViewMode.ReadOnly);
        pnlDropBoxDetailReportForm.Visible = false;
        btn_addDropBoxDetailReport.Visible = true;
        btn_addDropBoxDetailReportDone.Visible = false;
        gvDropBoxReportDetail.Columns[0].Visible = true;

    }