【问题标题】:Text Changed event doesn't fire in Gridview after a DataBind()在 DataBind() 之后,Gridview 中不会触发 Text Changed 事件
【发布时间】:2012-10-16 09:27:47
【问题描述】:

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

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

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

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

谁能解释一下这个问题。网格需要在用户四处导航时自动保存。

谢谢

【问题讨论】:

  • 您可以添加一个您所做的示例吗?
  • 等待...等待,“当下拉列表中的选定索引更改时”。这是DropDownList 在哪里?为什么要重新绑定 GridView OnSelectedIndexChanged 和按钮的 OnClick(从处理程序中还是从 page_load?)?通常代码能更好地解释你在做什么。
  • 没有代码我已经对我在做什么做了一个更简单的解释。它是一个网格,它显示一年的数据,可以直接在网格视图中编辑数据并在按下按钮时保存,如果用户选择不同的年份,那么网格会刷新,在刷新之前我想保存当前年份数据.这是通过使用文本框上的文本更改事件来检查它们是否已实际更改来实现的,但是当下拉选择的索引更改时这些事件不会触发,但它们会在单击事件的按钮之前触发。所以目前只有点击保存有效。
  • 在 SelectedIndexChanged 时,Text Changed 不会触发。您需要强制它触发事件。否则,当该事件触发时,只设置您想要设置的任何内容。

标签: .net events


【解决方案1】:

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

【讨论】:

  • 我倾向于同意,文本框的事件被添加到网格的 rowcreated 事件中。
【解决方案2】:

您在页面生命周期中受到时间安排的影响,其中一件事先于另一件事发生,而您期望\希望它们以不同的顺序发生。我的解决方法是在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2014-04-26
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多