.net c#postback覆盖绑定的文本框

时间:2009-10-21 01:44:45

标签: c# .net gridview postback

我有一个gridview,其内容由accessdatasource提供,显示的数据取决于具有回发事件的下拉列表

  • 页面加载
  • 用户从下拉列表中选择一个项目
  • 页面使用gridview
  • 中的新数据重新加载

到目前为止一切顺利

然后我在网格视图中添加了一个文本框(不,我不能使用标准的“编辑”链接) 文本框位于itemtemplate

此文本框包含可编辑数据,供用户点击更新按钮更新并发送回服务器。

问题是,如果我更改了下拉列表中的选择,gridview会更新,但文本框保留旧值,即使它们与<%#Bind(“vr_total”)%>

绑定

我只能假设这是由回发数据引起的,并且在绑定发生后数据被覆盖。 (否则绑定会覆盖旧的不需要的数据)

有人可以解释我如何改变这种行为。

viewstate设置为false

我是.net和c#

的新手

DC

进一步发展..

如果我将< asp:textbox替换为< input type =“text”value =“<%#Eval(”vr_total“)%>” ...>网格完全按预期工作。

问题似乎是gridview在绑定数据时填充其子控件,但是文本框会使用发布的内容(通过下拉列表中的回发事件)覆盖它,即使其viewstate已禁用。

2 个答案:

答案 0 :(得分:3)

克里斯, 控件具有所谓的ControlState,您无法禁用它。你遇到的问题是你在页面加载中加载和绑定,然后一个动作被激活。

我们解决此问题的方法是在Page_Load中加载数据并在OnPreRender中绑定数据。

例如:

private void Page_Load(object sender, System.EventArgs e)
{
  grid.DataSource = whatever;
}

// your dropdown event occurs between these two events

protected override void OnPreRender(EventArgs e)
{
   grid.DataBind();
}

要更好地了解ASP.NET ViewState,请查看http://msdn.microsoft.com/en-us/library/ms972976.aspx

答案 1 :(得分:0)

数据绑定仅在使用Page.DataBind通常调用数据时覆盖数据,这通常仅在页面的初始获取时执行,在后面的代码中

override void OnLoad(){
    if(this.IsPostBack == false){
        this.DataBind();
    }
}

或者类似的东西,当你的回复发生时,你不是数据绑定。这通常是正确的行为。

如果您希望在下拉列表更改时重新数据绑定网格,您可以在您的下拉列表中添加服务器端onChange事件处理程序,特别是对您的Gridview进行数据绑定,例如

void OnDropDownChange(EventArgs args){
    gridView.DataBind();
}

对于您来说,阅读更多有关数据绑定的更多信息可能是一个好主意,因为它非常重要且与许多其他方法非常不同。 http://support.microsoft.com/kb/307860将是一个开始的地方。