1

我们在页面上有一个带有选择文本框的 gidview,每个文本框都有一个 TextChanged 事件,用于更新它在数据库中的相应值。

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

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

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

任何人都可以阐明这个问题。当用户四处导航时,网格需要自动保存。

谢谢

4

2 回答 2

0

重新绑定网格会丢失嵌入在网格中的控件的所有事件。因此,当您在网格中绘制文本框时,您必须在该点添加事件处理程序。您必须在数据绑定上重新创建事件处理程序才能使其工作。

于 2012-10-16T10:36:21.560 回答
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
于 2013-05-24T17:03:39.997 回答