【问题标题】:What property values does GridView retain across data binding operations ( besides SelectedIndex )?GridView 在数据绑定操作中保留哪些属性值(除了 SelectedIndex )?
【发布时间】:2010-11-20 09:15:45
【问题描述】:

1) 假设 GridView1 绑定到 ObjectDataSource 并且 GridView1.SelectedIndex 设置为值 7。如果我们然后重新绑定 GridView1 通过调用GridView1.DataBind(),GridView.SelectedIndex 仍将保留其初始值(7)。

GridView 在重新绑定操作中是否还记得任何其他属性?

2) 假设 GridView1 绑定到 ObjectDataSource 控件。当 GridView1 的 行被删除时,我们可以在 GridView1.RowDeleted 事件处理程序中调用 GridView1.DataBind() 以从数据源中检索值。如果我们不在那个事件处理程序中调用 Gridview1.DataBind,那么 DataBind() 将被 Asp.Net 自动调用并且结果将是相同的。

那么有什么理由我们应该手动调用 GridView.DataBind(在 RowDeleted 事件处理程序中)而不是让 Asp.Net 自动调用它?

【问题讨论】:

    标签: asp.net gridview datasource


    【解决方案1】:

    您的答案在于 Page.DataBindControl.DataBind 方法。 主要区别在于调用 Page.DataBind 方法后,所有数据源都绑定到它们的服务器控件。在显式调用 Web 服务器控件的 DataBind 方法或调用页面级 Page.DataBind 方法之前,不会向控件呈现任何数据。通常,从 Page_Load 事件调用 Page.DataBind(或 DataBind)。 Source

    1) 的特殊答案是 GridView 没有这样的属性,但您可以自己制作一个并添加最后更改的控件。(理想)

    对于2)您的操作来自回发,因为默认绑定源在您删除其中的一行后更改,由于默认源无法再次绑定,您需要手动调用DataBind。

    【讨论】:

    • 1) 你的意思是除了 GridView.SelectedIndex 属性之外没有这样的属性,据我所知,它在重新绑定时记得它的值吗? 2)你是说执行Delete操作后,不会自动重新绑定GridView?我检查了这个,gridView 会自动重新绑定!
    • GridView 中包含的典型值是: SelectedValue SelectedRowValue SelectedRow.DataItem (Item in DataSet) source 本身 如果您使用 DataSet、DataTable 和 DataView 对象容器,您可能会知道这个问题。
    • 呃,我没关注你。我意识到数据源绑定到 DataView 而不是 DataTable 本身,但我不明白这与我们的讨论有什么关系
    • 我刚刚举了一个关于数据绑定关系的例子。你以错误的方式意识到这种关系。告诉我你有多不清楚,我可以用你的方式告诉你。
    • 对于给您带来的不便,我深表歉意,但我有点慢,所以你必须降到我的水平,因为你的术语(和你的句子结构)令人困惑和开放解释首先,我不知道您所说的“数据绑定关系”是什么意思,以及您在上一条消息之前试图在您的信息中传达什么。其次,我仍然不知道是否有任何理由或何时我们应该手动调用 GridView.DataBind( inside RowDeleted 事件处理程序) 而不是让 Asp.Net 自动调用它
    【解决方案2】:

    我将为初学者提一些关于分层数据绑定的内容。
    为了将数据源绑定到服务器端控件(GridView、DetailsView 等),该控件必须支持称为 DataSource 的属性和称为 DataBind() 的方法,并且控件绑定的数据源实现IEnumerable接口。

    DataSet和DataTable有一个例外,可以直接绑定,导致绑定到默认表的默认DataView。

    要将数据绑定到控件,请将数据源分配给控件的 DataSource 属性并调用其DataBind()方法。Source

    由于在您的情况下,数据绑定情况与您之前提到的不同,您将 GridView 与 ObjectDataSource 绑定,后者在页面加载和每个 SELECT、INSERT、UPDATE、DELETE 操作中执行查询,数据源会自动绑定(这意味着 DataBind 是也称为自动)。

    您首先要寻找答案的另一种情况是,如果在页面事件中查询并绑定数据源(即您查询某些内容并使用 DataTable 获取结果并将其绑定到 GridView 中-> 此源不在页面中,不是 objectdatasource 或其他东西作为静态源站在页面上)。由于此查询来自事件,因此当您启用 pageIndex 时,您必须再次查询它,这导致您还必须将其与 DataBind 绑定。

    数据表 sourceTable = GetDataFromServer(); gridView.DataSource = sourceTable; gridView.DataBind();

    希望这次你能理解。

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      相关资源
      最近更新 更多