在DataBind()之后,Gridview中的Text Changed事件不会触发

时间:2012-10-16 09:27:48

标签: .net events

我们在页面上有一个gidview,其中包含一系列文本框,每个文本框都有一个TextChanged事件,用于更新数据库中相应的值。

该页面包含一个按钮,当按下该按钮会导致回发并且文本已更改事件触发并且一切正常。

当下拉列表中的选定索引发生更改时,网格会反弹,但文本更改的事件不会触发。

网格也会在按钮点击事件中反弹,但似乎文本在按钮单击之前更改了事件,但是在文本更改事件之前所选索引事件触发,我认为重新绑定网格导致文本更改事件被忽略或从控件中删除。

任何人都可以解释这件事。当用户导航时,网格需要自动保存。

由于

2 个答案:

答案 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