2009-04-15 65 views
0



設置GridView控件的DataSourceID爲「」,導致GridView控件失去

如果我綁定的GridView到的SqlDataSource,然後第一次頁將被創建,GridView控件將顯示來自數據源檢索列。但是,如果在回發我設置GridView.DataSourceID爲空或爲空字符串

protected void Page_Load(object sender, EventArgs e) 
    { 
      ... 
     if (IsPostBack) 
      GridView1.DataSourceID = ""; 
      ... 
    } 

,則GridView控件將不顯示在所有任何行。但爲什麼呢?

假設GridView的EnableViewstate設置爲true,那麼它應該能夠顯示從第一次創建頁面時從數據源檢索到的行! 我意識到有人可能會爭辯說,框架通知DataSourceId已經改變,並假定GridView不需要以前的數據源的數據,但我會假設框架會認識到,空字符串或空引用不指向任何數據源和從而不會刪除從以前的數據源檢索到的任何數據GridView?!


謝謝


編輯:
你好,

基本上是怎麼回事是,一旦你已經設置的DataSourceID爲空或一個空的條紋g該控件將此作爲來自控件使用者的指示,表明它們不希望綁定任何數據(甚至是ViewState數據)。控件在綁定之前檢查DataSourceID,如果它是一個空字符串,則它在其EnsureDataBound方法中不包含DataBind。


所以,如果你設置的DataSourceID裏面的Page_Load()空,但是GridView的結合(發生的Page_Load後多)前只檢查了DataSourceID片刻,然後直到DataSourceID的檢查,從以前的包含數據的ViewState數據源應該仍然在Page_Load()內部可用(並且仍然可用,例如,在訂閱引發回發的事件的事件處理程序中)?

+0

我一直在檢討我的老線......反正......如果我設置了DataSourceID爲Null(裏面的Page_Load()),然後回傳我仍然能夠訪問數據在GridView中(直到DataSourceID被選中)通過Label1.Text = GridView.Rows [] .Cells [] .Text; – SourceC 2009-06-09 11:09:36

回答

4

如果將DataSourceID設置爲null或空字符串,則您的控件將不會重新綁定到ViewState數據。我在下面鏈接的文章有一個很好的解釋,爲什麼。

基本上是怎麼回事是,一旦你設置了DataSourceIDnull或空字符串控制藉此從控制的消費者,他們不希望在所有(甚至ViewState的數據綁定任何數據的指示)。該控件在綁定之前檢查DataSourceID,如果它是空字符串,那麼它的EnsureDataBound方法中不包含DataBind

System.What?: DataSource VS. DataSourceID (Internals)

1

我認爲框架將實現 空字符串或空引用 不指向任何數據源 的,因此不會刪除以前的數據檢索 源的任何數據 GridView的?

爲什麼你認爲這樣,你重置值,當然,girdview必須綁定你重置的新值。