2

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

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

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

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

4

2 回答 2

0

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

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

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

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

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

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

我希望你能理解这一次。

于 2009-08-19T08:08:36.757 回答
0

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

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

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

于 2009-08-17T20:41:37.647 回答