日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ASP.NET Web開發(fā)框架之二 數(shù)據(jù)輸入窗體

Web框架要達(dá)到快速開發(fā),又便于維護(hù),進(jìn)行了一系列的努力。

創(chuàng)新互聯(lián)公司是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、微信小程序定制開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立10余年以來(lái),已經(jīng)為上1000家成都格柵板各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的上1000家客戶與我們一路同行,見(jiàn)證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。

請(qǐng)看最初始的ASP.NET頁(yè)面,對(duì)數(shù)據(jù)進(jìn)行操作的代碼,頁(yè)面的基本代碼如下所示

  
 
 
 
  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.        if (!IsPostBack)  
  4.        {  
  5.               LoadData();  
  6.         }  
  7. }  
  8.  
  9. private void LoadData()  
  10.  {  
  11.      UserEntity  current=GetUser(); 
  
 
 
 
  1.      tbxName.Text = current.Name;  
  2.      tbxRemark.Text = current.Remark;  
  3. }  
  4.  
  5. protected void btnSave_Click(object sender, EventArgs e)  
  6. {     
  7.             int id = GetQueryIntValue("id");          
  8.             IXRoleManager menuManager = ClientProxyFactory.CreateProxyInstance();  
  9.             XRoleEntity item = menuManager.GetXRole(id);  
  10.  
  11.             item.Name = tbxName.Text.Trim();  
  12.             item.Remark = tbxRemark.Text.Trim();           
  13.             menuManager.SaveXRole(item);  
  14.             ExtAspNet.Alert.Show("Save successfully");  

在Page_Load中加載數(shù)據(jù),并綁定到控件中去。在保存按鈕事件中,把用戶修改過(guò)的值,再寫回到數(shù)據(jù)庫(kù)中。這樣的代碼,在項(xiàng)目中要重復(fù)很多次,數(shù)據(jù)項(xiàng)越多,所需要的代碼量越大。有沒(méi)有一種辦法,可以實(shí)現(xiàn)自動(dòng)綁定數(shù)據(jù)到控件中,在保存中,又自動(dòng)將數(shù)據(jù)寫回到數(shù)據(jù)庫(kù)中去呢? Enterprise Solution以下面的方法來(lái)實(shí)現(xiàn)。

Enterprise Solution對(duì)于要輸入數(shù)據(jù)并保存到數(shù)據(jù)庫(kù)中的這一類操作,統(tǒng)一提供相同的界面,對(duì)數(shù)據(jù)快速操作。以記事本為例子,它的最終效果是這樣的

工具欄按鈕由框架自動(dòng)加載,當(dāng)你的類型繼承自EntryPageBase時(shí),它就會(huì)加載工具欄,用于操作數(shù)據(jù)。

  
 
 
 
  1. [Function("AIITRL", "~/module/note.aspx")]  
  2. public partial class note : EntryPageBase  
  3. {  
  4.         protected override void PageLoadEvent(object sender, EventArgs e)  
  5.         {  
  6.             if (!IsPostBack)             
  7.                 TransactionType = "BlotterEntity";                              
  8.             base.PageLoadEvent(sender, e);  
  9.         }  

重寫基類的PageLoadEvent方法,傳入TransactionType ,框架以TransactionType 來(lái)識(shí)別界面的實(shí)體對(duì)象,自動(dòng)實(shí)現(xiàn)讀寫操作。頁(yè)面中的加載,保存,刪除按鈕事件的代碼如下,可以看到,它們都是在重寫基類的方法

  
 
 
 
  1. public override EntityBase2 LoadEntity(string customerNo)  
  2.  {  
  3.      IBlotterManager manager = ClientProxyFactory.CreateProxyInstance();  
  4.      BlotterEntity customer = manager.GetBlotter(Convert.ToInt16(customerNo));  
  5.      return customer;  
  6.  }      
  7.  
  8.  public override void DeleteEntity(EntityBase2 entity)  
  9.  {  
  10.      BlotterEntity user = (BlotterEntity)entity;  
  11.      IBlotterManager manager = ClientProxyFactory.CreateProxyInstance();  
  12.      manager.DeleteBlotter(user);  
  13.  }  
  14.  
  15.  public override void SaveEntity(EntityBase2 entity)  
  16.  {  
  17.      BlotterEntity user = (BlotterEntity)entity;  
  18.      IBlotterManager manager = ClientProxyFactory.CreateProxyInstance();  
  19.      manager.SaveBlotter(user);  
  20.  }     

如你所看到的,這就是所有的代碼,關(guān)于數(shù)據(jù)加載,保存,刪除的代碼,沒(méi)有數(shù)據(jù)綁定,也沒(méi)有數(shù)據(jù)回寫到數(shù)據(jù)庫(kù)中的代碼。***,來(lái)看一下,ASPX頁(yè)面,是如何達(dá)到這個(gè)目的的

  
 
 
 
  1.  

每一個(gè)需要綁定數(shù)據(jù)的ExtAspNet控件,附帶一個(gè)DataBindingString屬性,指出綁定到對(duì)象的屬性名。這個(gè)數(shù)字輸入框是綁定到記事本的Id屬性,在設(shè)計(jì)時(shí),你可以這樣指定它

Web框架提供了快速的數(shù)據(jù)屬性綁定支持,請(qǐng)先在配置文件中指定需要反射的程序集完整路徑。

  
 
 
 
  1.    
  2.       
  3.  
  4.  

DataBindingString的編輯器,反射此程序集,把它的屬性顯示在ListView中,用于綁定。

應(yīng)用此模型,明顯的減少了代碼量。比如,有100個(gè)控件,就要寫100行讀取值并到綁定到界面中的代碼,在保存時(shí),再寫100行代碼,把值回寫到數(shù)據(jù)庫(kù)中。而此開發(fā)方法,數(shù)據(jù)的綁定是自動(dòng)的,您只需要指定必要的屬性,框架會(huì)為你做好其它的事情。再來(lái)看看,要實(shí)現(xiàn)此方法,背后要做出的努力

1  需要指定要反射的類型,TransactionType = "BlotterEntity"; 這一句的作用相當(dāng)關(guān)鍵。

2  將反射的值,綁定到控件。依據(jù)反射,賦值的代碼,如下所示

  
 
 
 
  1. ReflectionHelper.SetPropertyValue(textbox, targetProperty, obj); 

這一句就是用來(lái)給值的,把從數(shù)據(jù)庫(kù)中取到值,轉(zhuǎn)化為可用的類型,賦給textbox的Text屬性,完成數(shù)據(jù)綁定。

3  回寫值到數(shù)據(jù)庫(kù)中。依然是反射,把值取到,賦給Entity

  
 
 
 
  1. object obj = ReflectionHelper.GetPropertyValue(textbox, targetProperty);  
  2. object converted = Convert.ChangeType(obj, type);  
  3. ReflectionHelper.SetPropertyValue(entity, arr[1], converted); 

如代碼所示,取到值,回寫到實(shí)體類的屬性中。起關(guān)鍵作用的,還是DataBindingString字符串。

再來(lái)看看,主從表數(shù)據(jù)的讀寫,這比上面的單表讀寫,要復(fù)雜一些。

銷售單由表頭,參考編號(hào)和明細(xì)多行物料編號(hào)組成。表頭的讀寫,可以用上面的方法,在明細(xì)的數(shù)據(jù)讀取上,重寫方法

  
 
 
 
  1. protected override void InitNavigator(EntityBase2 entity)  
  2. {  
  3.        SalesOrderEntity user = (SalesOrderEntity)entity;  
  4.        Grid1.DataSource = user.SalesOrderDetails;  
  5.        Grid1.DataBind();  

InitNavigator用于獲取當(dāng)前實(shí)體,綁定值到明細(xì)列表中。Insert按鈕的的實(shí)現(xiàn)原理如下,它把表頭的主鍵值,帶到明細(xì)頁(yè)面中去,用HiddenField藏在頁(yè)面中。這樣,在保存明細(xì)時(shí),以此值作為主鍵保存。當(dāng)返回表頭時(shí),刷新主表,重新獲取值,則可以顯示明細(xì)表增加的值。


當(dāng)前名稱:ASP.NET Web開發(fā)框架之二 數(shù)據(jù)輸入窗體
路徑分享:http://www.dlmjj.cn/article/djgcjsh.html