我有一个列表控件。我有来自该对象的数据。在该对象中有一个名为status id的字段。
我有一个下拉框。下拉列表包含状态ID字段。
最初所有数据都是正式的。
当我通过在下拉列表中选择一个选项来点击过滤器时,我希望我的列表加载时状态字段等于下拉列表中的selecetd值。
在页面加载中我使用foreach来填充列表控件。我在哪里将filter语句放入下拉代码中。我应该把它放在if(!ispostback)或者回发之外。
因为每次我从下拉列表中选择值时,列表都会填充默认值。
请帮帮我。
答案 0 :(得分:1)
根据我的描述,如果您将过滤代码放在页面加载事件中,而不是:
如果它位于if(!Page.IsPostBack){}块内部,而不是仅在第一次呈现页面时执行 - 但是您希望最初拥有所有数据并在以后进行过滤从下拉列表中选择了一个选项;
如果它在这个区域之外是不对的,因为当页面上的任何控件导致回发时,不仅当你想要通过从下拉列表中选择一个选项进行过滤时,它将被执行。
尝试使用类似的东西:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// executed only first time
// load data for both list control and drop down
}
}
protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
// filter the data
// (or clear the items in the list control and fetch new data for the list
// control based on the status id selected in the drop down and rebind it)
}
不要忘记为下拉控件设置AutoPostBack =“True”,否则SelectedIndexChanged事件不会导致回发,更改选择时不会过滤您的数据(仅在其他一些控件导致回发后)