** - 编辑 - 已解决 - ** 将onclick逻辑移动到表单数据绑定事件。
我在面板中有一个formview控件。 btn_addDropBoxReportDetail_Click事件使包含我的formview的面板可见。然后我在表单中找到我想要的控件,并动态默认某些控件的值。
现在我第一次点击btn_addDropBoxReportDetail_Click它有效。但是一旦我点击btn_addDropBoxReportDetailDone_Click来隐藏面板然后点击btn_addDropBoxReportDetail_Click它似乎没有等待面板变得可见。
编辑:我收到NullReferenceException未被用户代码处理。对象引用未设置为fvAddDropBoxReportDetail.FindControl上对象的实例
EDIT2:调试期间输入的值是 - 标签lblState =(标签)fv_DropboxReport.FindControl(" lblState"); == {文字=" WA"} ddlSourceStateAdd.SelectedIndex = ddlSourceStateAdd.Items.IndexOf(ddlSourceStateAdd.Items.FindByText(lblState.Text)); == {57} --- DEBUG模式显示第一次找到控件并且值正确传递。一切都很棒,直到我点击完成按钮,然后按下添加按钮。
一旦面板变得可见并显示表单,它应该在表单中找到控件并默认使用此行代码从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>
代码背后
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;
}