成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET2.0數據源控件的用法淺析

開發 后端
ASP.NET2.0數據源控件的用法向你介紹了ASP.NET2.0數據源控件的基本情況,主要是ASP.NET2.0下的新特點。

之前我們討論了數據綁定控件的做法,但都未涉及到ASP.NET2.0數據源控件的用法,讓用慣了數據源控件的人可能感覺不適應。這次我們就開始討論在ASP.NET2.0中,我們該如何定義ASP.NET2.0數據源控件件。我一直在想,是先討論數據源控件呢,還是先討論數據綁定控件,兩者是密不可分的。在看下文之前,我想大家應該對ASP.NET2.0中的數據源控件使用的簡易性非常熟悉了。記得園子的開源項目NBear也為大家提供了數據源控件。個人認為數據源控件和數據綁定控件之間存在著一些約定關系,學習還當從易到難,這里就假定我們對內置的數據源已經能夠熟練的使用了。這里就看看如果定義新的數據綁定控件.

ASP.NET2.0數據源控件一.數據綁定控件新做法

1. ***種為純代碼做法,這種做法比較的煩瑣

2.新做法數據綁定控件與數據源控件結合.不同之處則是不需要寫重復代碼, 如

  1. ﹤asp:GridView ID="GridView1" runat="server"   
  2.  
  3.        DataSourceID="SqlDataSource1" AutoGenerateColumns="False"﹥  
  4.     ﹤Columns﹥  
  5.         ﹤asp:BoundField DataField="CompanyName"   
  6.  
  7.        HeaderText="CompanyName" SortExpression="CompanyName" /﹥  
  8.         ﹤asp:BoundField DataField="ContactName"   
  9.  
  10.         HeaderText="ContactName" SortExpression="ContactName" /﹥  
  11.     ﹤/Columns﹥  
  12. ﹤/asp:GridView﹥  
  13. :SqlDataSource ID="SqlDataSource1" runat="server"   
  14.  
  15.         ConnectionString="﹤%$ ConnectionStrings:NorthwindConnectionString2 %﹥" 
  16.     SelectCommand="SELECT [CompanyName], [ContactName] FROM [Customers]"﹥﹤/asp:SqlDataSource﹥ 

上面的做法是ASP.NET2.0里面新增的,如果你沒有學過ASP.NET1.1而直接學2.0的話,上面的寫法是非常簡單的,沒有寫一行的代碼.

這樣的做法可能會讓人產生以下幾點看法

(1)初學者認為ASP.NET真的很簡單,是的很簡單,在簡單的同時你也該意識到數據源控件為你做了重復的工作,快速開發的同時你是否該了解下上面的做法是如何實現的

(2)接觸過.net一段時間的人則會認為DataSource數據源控件只是小兒科,大項目怎么可以這么做,對其不放心,還是自己手動寫代碼比較放心-_-.

數據源控件好不好用這里不必討論,但我想大多數人還是向其靠攏的.

ASP.NET2.0數據源控件二.數據綁定控件相同機制

數據綁定控件需要數據源

(1)在沒有數據源控件之前,數據綁定控件需要先給DataDource屬性賦值獲取數據源,然后執行DataBind()方法

(2)在數據源控件出現之后,數據綁定控件仍然需要數據源,只不過方式發生了變化,不是通過DataDource屬性直接的獲取,而是間接的通過數據源控件獲取,然后幫你自動執行了DataBind()方法

所以這里需要注意的是,當設置DataDourceID的時候,不需要再調用DataBind()方法,兩種方法不可同時使用

站在使用者的角度,***的變化也就是給我們兩種數據綁定做法的選擇.偷懶的我們當然愿意選擇后一種,一切交給數據源控件為我們處理.

ASP.NET2.0數據源控件三.數據綁定控件新的起點

上篇我們講到過BaseDataList類 .1.1中的舊的數據綁定控件從此抽象類中繼承下來,而2.0中新的數據綁定控件,并沒有這么做,而是從BaseDataBoundControl類重新開始,以此為基礎.net為我們定義了一些比較實用的類.當然在.net2.0中,BaseDataList類也提供了DataDourceID屬性,但微軟也很明確的表示讓我們棄用DataGrid,使用GridView . 暫時我們先不去想為什么,只有了解以后,我們才能去比較

在微軟的MSDN上,早就有篇文章介紹ASP.NET 2.0 和數據綁定控件:新的角度,新的做法  大家可以看看

這次我們只需要了解兩個基類

要了解的兩個基類 

兩個類都為抽象類BaseDataBoundControl類定義了兩個抽象方法PerformSelect和ValidateDataSource由子類實現.

雖然你不需要對這兩個類的實現了解很多,但你需要知道兩個類為你做了什么.

1.BaseDataBoundControl類大致做了如下工作

定義了基本的DataSource和DataSourceID基本屬性,我們稱為數據源標識

其主要提供了兩種不同做法的實現機制

(1)定義了DataSource,則會驗證數據源的正確性即ValidateDataSource方法(此過程由子類完成),還需要手動調用DataBind方法

(2)定義了DataSourceID,則會自動調用DataBind方法

當定義了以上其中一個屬性時,這個類便幫你做了以下執行過程,所以你還需要了解以下成員

OnDataPropertyChanged 方法(當定義了數據源標識或其發生變化后)

RequiresDataBinding方法(確定要開始調用DataBind方法)

EnsureDataBound 方法(判斷如若定義DataSourceID屬性,則執行DataBind方法,所以此步驟是關鍵點)

DataBind 方法(在次方法中執行了PerformSelect方法檢索數據并把數據綁定到控件,此過程由子類完成)

2.DataBoundControl 類開始真正的與數據源控件開始交互,請看下面主要實現
(1)GetDataSource方法(檢索與數據綁定控件關聯的IDataSource接口,即從DataSourceID屬性屬性)

(2)GetData方法(從數據源控件檢索數據源視圖,這個方法是數據的主要來源)

(3)PerformSelect 方法(從GetData方法中檢索數據,然后調用PerformDataBinding方法)

(4)PerformDataBinding方法(將檢索到的數據綁定到控件上,此方法為空實現,留給子類實現)

注意點:如果未設置DataSourceID屬性,(1)(2)步驟可以省去,從(3)開始必然會執行.

一般情況下,簡單的數據綁定控件留給我們做的只剩下第4個步驟PerformDataBinding方法,你只需要重寫這個方法,獲取控件要呈現的數據就完成了.其他的事情就不需要你操心了.說了這么多,還是來看看示例代碼吧.

ASP.NET2.0數據源控件四.示例

代碼來自ASP.NET2.0揭密,我把重復的定義刪除了只留下PerformDataBinding方法

1.從DataBoundControl繼承

  1. public class TextBoxSet : DataBoundControl  
  2.     {  
  3.     } 

2.定義屬性

  1. private IList alBoxSet;  
  2. public IList BoxSet  
  3. {  
  4.     get 
  5.     {  
  6.         if (null == alBoxSet)  
  7.         {  
  8.             alBoxSet = new ArrayList();  
  9.         }  
  10.         return alBoxSet;  
  11.     }  
  12. }  
  13. public string DataTextField  
  14. {  
  15.     get 
  16.     {  
  17.         object o = ViewState["DataTextField"];  
  18.         return ((o == null) ? string.Empty : (string)o);  
  19.     }  
  20.     set 
  21.     {  
  22.         ViewState["DataTextField"] = value;  
  23.         if (Initialized)  
  24.         {  
  25.             OnDataPropertyChanged();  
  26.         }  
  27.     }  

3.方法實現

  1. protected override void PerformDataBinding(IEnumerable retrievedData)  
  2.  {  
  3.      if (retrievedData != null)  
  4.      {  
  5.  
  6.          foreach (object dataItem in retrievedData)  
  7.          {  
  8.  
  9.              TextBox box = new TextBox();                     
  10.              if (DataTextField.Length ﹥ 0)  
  11.              {  
  12.                  box.Text = DataBinder.GetPropertyValue(dataItem,  
  13.                      DataTextField, null);  
  14.              }  
  15.              else 
  16.              {  
  17.                  PropertyDescriptorCollection props =  
  18.                      TypeDescriptor.GetProperties(dataItem);  
  19.                  box.Text = String.Empty;  
  20.                  if (props.Count ﹥= 1)  
  21.                  {  
  22.                      if (null != props[0].GetValue(dataItem))  
  23.                      {  
  24.                          box.Text = props[0].GetValue(dataItem).ToString();  
  25.                      }  
  26.                  }  
  27.              }  
  28.  
  29.              BoxSet.Add(box);  
  30.          }  
  31.      }  
  32.  }  
  33.  protected override void Render(HtmlTextWriter writer)  
  34.  {             
  35.      if (BoxSet.Count ﹤= 0)  
  36.      {  
  37.          return;  
  38.      }  
  39.      if (Page != null)  
  40.      {  
  41.          Page.VerifyRenderingInServerForm(this);  
  42.      }  
  43.      writer.RenderBeginTag(HtmlTextWriterTag.Ul);  
  44.      foreach (object item in BoxSet)  
  45.      {  
  46.  
  47.          TextBox box = (TextBox)item;  
  48.          writer.WriteBeginTag("li");  
  49.          writer.Write("﹥");  
  50.          writer.WriteBeginTag("input");  
  51.          writer.WriteAttribute("type""text");  
  52.          writer.WriteAttribute("value", box.Text);  
  53.          writer.Write("﹥");  
  54.          writer.WriteEndTag("input");  
  55.          writer.WriteEndTag("li");  
  56.      }  
  57.      writer.RenderEndTag();  
  58.  } 

接下來你便可以使用了

  1. ﹤aspDemo:TextBoxSet ID="TextBoxSet1" r  
  2.  
  3. unat="server" DataSourceID="SqlDataSource1" 
  4.             DataTextField="CompanyName" /﹥  
  5.           
  6.     ﹤asp:SqlDataSource ID="SqlDataSource1" runat="server"   
  7.  
  8. ConnectionString="﹤%$ ConnectionStrings:NorthwindConnectionString2 %﹥" 
  9.             SelectCommand="SELECT [CompanyName], [ContactName] FROM [Customers]"﹥  
  10.  
  11. ﹤/asp:SqlDataSource﹥ 

本次的示例代碼比較簡單,對于繼承的兩個基類,我們還需要多了解下.對其屬性和方法心理有個概念他們的工作是獲取數據,我們的工作是呈現數據,具體如何獲取數據,我們以后來看數據源控件的實現方法.

以上純屬經驗之談,說錯了還請大家指正-_-

ASP.NET2.0數據源控件的基本情況就向你介紹到這里,希望對你了解ASP.NET2.0數據源控件有所幫助。

【編輯推薦】

  1. ASP.NET控件開發基礎之服務器控件客戶端功能
  2. ASP.NET控件開發之控件生成器淺析
  3. ASP.NET控件開發基礎的總結詳解
  4. ASP.NET模板控件開發淺析
  5. ASP.NET數據綁定控件開發淺析
責任編輯:仲衡 來源: 博客園
相關推薦

2009-07-23 14:43:24

數據源控件ASP.NET 2.0

2009-07-28 14:22:05

數據源控件ASP.NET

2009-07-29 15:17:42

驗證控件ASP.NET1.1ASP.NET2.0

2009-07-29 14:59:26

asp.net1.1ASP.NET2.0

2009-08-04 14:44:40

callback實現機ASP.NET2.0

2009-07-28 14:06:28

ASP.NET 2.0

2009-08-05 17:43:48

ASP.NET 2.0

2009-08-04 15:20:59

ASP.NET數據驗證數據驗證控件

2009-08-07 15:34:15

ASP.NET數據綁定

2009-07-27 15:59:34

ASP.NET虛擬主機

2009-07-27 17:25:53

ASP.NET驗證控件

2010-06-02 16:49:24

MySQL存儲過程

2009-07-30 13:18:31

2009-07-24 17:15:52

SiteMapData

2010-09-06 13:51:38

CSS失效CSS

2009-08-04 17:41:10

ASP.NET數據驗證

2009-11-26 09:02:59

ASP.NET數據控件

2009-08-07 17:41:07

ASP.NET Web

2009-08-03 18:15:05

ASP.NET數據綁定

2009-07-24 09:57:25

ASP.NET HTM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清一区二区三区 | 国产不卡一 | av免费在线播放 | 久久精品欧美视频 | 国产一区二区视频免费在线观看 | 亚洲一区在线日韩在线深爱 | 亚洲婷婷一区 | 日韩电影免费观看中文字幕 | 久久99精品久久久久久 | 日韩在线日韩 | 日日综合 | 国产视频线观看永久免费 | 久久久亚洲综合 | 久久午夜精品福利一区二区 | 黄色a级一级片 | 伦理一区二区 | 黄篇网址| 在线看一区二区三区 | 午夜影院免费体验区 | www97影院| 日本中文字幕在线观看 | 国产欧美精品区一区二区三区 | 午夜国产精品视频 | 毛片免费视频 | 国产精品欧美一区喷水 | 国外成人在线视频网站 | 午夜在线精品 | 国产成人精品一区二区三区视频 | 在线看av网址 | 1级毛片| 91免费看片神器 | 久久久视频在线 | av夜夜操 | 国产精品视频网站 | 人人干人人艹 | 久久精品国产免费看久久精品 | 91欧美精品成人综合在线观看 | 国产ts人妖系列高潮 | 蜜桃av鲁一鲁一鲁一鲁 | 在线观看中文字幕一区二区 | 伊人网在线看 |