更新数据绑定下拉列表控件时,另一个数据绑定的下拉列表改变
问题描述:
我有两个数据绑定的下拉列表:更新数据绑定下拉列表控件时,另一个数据绑定的下拉列表改变
if (!IsPostBack)
{
ddlSelectProgram.DataSource = new PEIATableAdapters.programTableAdapter().GetData();
ddlSelectProgram.DataBind();
ddlSelectSurveyType.DataSource = new PEIATableAdapters.ParticpantSurveyFormIDsTableAdapter().GetFormIDsByProgramID(ProgramID);
ddlSelectSurveyType.DataBind();
BindData();
}
到BindData该呼叫被正确地填充grdResults页面加载时:
private void BindData()
{
PEIATableAdapters.ParticipantSurveysTableAdapter adapter = new PEIATableAdapters.ParticipantSurveysTableAdapter();
grdResults.DataSource = adapter.GetDataByFormID(FormID);
grdResults.DataBind();
}
然而,当页面被重新发布并且通过单击Submit按钮再次调用DataBind,在ddlSelectProgram中选择的值没有被传入。Submit按钮的click事件仅仅是调用Databind()并且事件正在触发。
这里是ProgramID和FormID属性:
protected int ProgramID
{
get
{
return Convert.ToInt32(ddlSelectProgram.SelectedValue);
}
set
{
ddlSelectProgram.SelectedValue = value.ToString();
}
}
protected int FormID
{
get
{
return Convert.ToInt32(ddlSelectSurveyType.SelectedValue);
}
set
{
ddlSelectSurveyType.SelectedValue = value.ToString();
}
}
如何配合这两个控件在一起,这样当ddl_SelectProgram随后改变了ddlSelectSurveyType改变?
答
在标记中将属性AutoPostBack =“True”添加到ddlSelectProgram中,并将事件处理程序添加到代码隐藏中的ddlSelectProgram的SelectedIndexChanged事件中。在该事件中绑定ddlSelectSurveyType。
答
当页面加载仅填充ddlSelectSurveyType时。然后在ddlSelectSurveyType的值改变时使用autoPostBack和catch事件。然后在您知道选择了ProgramID后填充您的数据。
我实际上已经做到了这一点,它不是最终的解决方案,但它是它的一部分。我需要将控件绑定两次,因为它需要在页面加载以及为ddlSelectProgram触发SelectedIndexChanged事件时完成。因此,除了简单地绑定事件,我首先必须将DataSource设置为null,然后重新分配DataSource并最终调用Bind。 – Darren 2012-04-12 16:59:08