如果我将GridView绑定到SqlDataSource,那么第一次创建页面时,GridView将显示从数据源检索的列。但如果在回发时我将GridView.DataSourceID设置为null或空字符串
protected void Page_Load(object sender, EventArgs e)
{
...
if (IsPostBack)
GridView1.DataSourceID = "";
...
}
,然后GridView根本不会显示任何行。但那是为什么呢?
假设GridView将EnableViewstate设置为true,那么它应该能够显示首次创建页面时从数据源检索到的行! 我意识到有人可能会认为Framework注意到DataSourceId已经改变并假设GridView不需要来自先前数据源的数据,但是我假设Framework会意识到空字符串或空引用不指向任何数据源,因此不会删除GridView从以前的数据源检索到的任何数据?!
谢谢
编辑:
你好,
基本上发生的事情是,一旦你将DataSourceID设置为null或空字符串,控件就会将其作为来自控件使用者的指示,表明他们根本不希望绑定任何数据(甚至是ViewState数据) 。控件在绑定之前检查DataSourceID,如果它是一个空字符串,那么它的EnsureDataBound方法中没有DataBind。
因此,如果在Page_Load()中将DataSourceID设置为null,但GridView仅在绑定之前检查DataSourceId时刻(在Page_Load之后发生很多),那么在检查DataSourceId之前,包含来自先前数据源的数据的ViewState仍应在Page_Load中可用()(并且仍然可用,例如,在订阅导致回发的事件的事件处理程序中)?!
答案 0 :(得分:4)
如果将DataSourceID
设置为null
或为空字符串,则控件不会重新绑定到ViewState数据。我在下面链接的文章对原因有很好的解释。
基本上发生的事情是,一旦你将DataSourceID
设置为null
或空字符串,控件就会将此作为来自控件使用者的指示,表示他们不希望绑定任何字符串根本就是数据(甚至是ViewState数据)。控件在绑定之前检查DataSourceID
,如果它是空字符串,则它在DataBind
方法中不EnsureDataBound
。
答案 1 :(得分:1)
我假设框架会实现 空字符串或空引用 不指向任何数据源 因此不会删除任何数据 GridView从以前的数据中检索 源?
为什么你这么想,你重置了值,当然,girdview必须绑定你重置的新值。