我们在页面上有一个gidview,其中包含一系列文本框,每个文本框都有一个TextChanged事件,用于更新数据库中相应的值。
该页面包含一个按钮,当按下该按钮会导致回发并且文本已更改事件触发并且一切正常。
当下拉列表中的选定索引发生更改时,网格会反弹,但文本更改的事件不会触发。
网格也会在按钮点击事件中反弹,但似乎文本在按钮单击之前更改了事件,但是在文本更改事件之前所选索引事件触发,我认为重新绑定网格导致文本更改事件被忽略或从控件中删除。
任何人都可以解释这件事。当用户导航时,网格需要自动保存。
由于
答案 0 :(得分:0)
重新绑定网格会丢失嵌入网格中的控件的所有事件。因此,当您在网格中绘制文本框时,您必须在该点添加事件处理程序。您必须在数据绑定器上重新创建事件处理程序才能使其正常工作。
答案 1 :(得分:0)
您正在接受页面生命周期中的计时,其中有一件事情发生在另一件事情之前,当您预期\希望它们以不同的顺序发生时。我的解决方法是在SelectedIndexChanged事件中翻转一个布尔标志,然后在页面完全加载后处理OnLoadCompleted中的事件,并触发所有事件。我想有一个更好的答案,但这解决了我。
#region Fields
private bool switchFirstDataRow_ = false;
#endregion Fields
#region Events
protected void ddlFirstRowOfData_SelectedIndexChanged(object sender, EventArgs e)
{
// NOTE: Moved the handling of these changes to OnLoadComplete because the grid view load\events were not firing
// ......until after these events had alreadyc completed, resulting in grid view changes not saving
switchFirstDataRow_ = true;
}
protected override void OnLoadComplete(EventArgs e)
{
base.OnLoadComplete(e);
// NOTE: Moved the handling of these changes here because the grid view load\events were not firing
// ......until after these events had already completed, resulting in grid view changes not saving
// Apply pending first data row changes
if (switchFirstDataRow_)
{
// Do something here to respond to event...
Controller.SetFirstRowOfData(ddlFirstRowOfData.SelectedIndex + 1);
// Re-bind the grid
gvImportConfiguration.DataBind();
}
}
#endregion Events