国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

精彩推薦:.Net編程的十個技巧

2024-07-10 13:02:11
字體:
來源:轉載
供稿:網友
.net編程的10點技巧
--------------------------------------------------------------------------------

不管你是對windows forms, asp .net, web services感興趣, 還是對 .net framework感興趣,這些技巧幫助你探索新的.net技術。
by dino esposito


.net framework比以前更大了,包含了大量的類和方法,但是開發團體還沒有探索和理解大多數的難以置信的軟件特性,這些特性開始的時候也許是個bug或者設計缺陷,第二次出現的時候也許就被認為是一個重大的改進,包涵了更多的思考。

按照這不可避免的再優化過程,和其他開發者共享技巧是一個能夠讓你在建立你的第一個.net應用程序時把握正確方法的途徑,盡管它遠遠不能夠提供你正在尋找的明確的解決方案。我總結了能夠使你的.net開發效率更高的十個技巧。為了能盡可能多的幫助開發人員,這些技巧覆蓋了這項技術的整個范圍,從ado.net到asp.net,從clr到framework,從windows forms到web services。這些技巧,再加上我可以預期的,將會對開發人員產生很大的影響。


#1建立你的datagrid的頁腳

datagrid控件的頁腳起著很重要的作用—也就是說,頁腳能總結頁面里的部分內容。除非你設置showfooter成true, 否則頁腳是看不見的。一旦你設置了,頁腳就會出現,但是它和其它行有同樣數目的列。如果你覺得這個可以,那就沒有問題。否則,你就需要給頁腳增加字段或者去掉現有的字段。

onitemcreated是關鍵的調用事件。它是事件處理程序的開始: listitemtype itemtype = _e.item.itemtype;
if (itemtype == listitemtype.footer)
  {
     e.item.cells.removeat(1);
     e.item.cells.removeat(1);
     cellsummary.columnspan = 3;
     e.item.cells[0].text = "…";
   }



確保頁腳建立時你能夠干涉,然后取得在頁腳行顯示的實例。這樣你就可以隨意增加和減少單元了。別忘了把columnspan屬性設置成為列的初始值,以避免顯示的問題,比如,頁腳線比其它格子長或者短了。


#2 使用 cache 對象而不使用 application對象

在asp中,你使用application對象來發現全局事件和儲存全局范圍的數據。假設許多不同的用戶可以訪問同一個數據,你必須使用lock 和unlock方法來實現連續訪問和避免訪問沖突或者其它不可預測的結果。在asp.net中,和application對象一起的,還有cache對象,它和application有相同的特征,但最終可以在不止一個場合來做application的替代品。

cache對象和application對象都是集合數據容器,其內容能跨越頁面和session領域。他們都不支持web farm和web garden情況。web farm是多個服務器運行一個應用程序的網絡服務器結構。web garden是同一個服務器上的多個進程運行一個程序。

和application不同的是,cache對象在應用程序的第一次調入時并沒有實例化。僅當你使用它時它才會被創建。另外,cache對象還可以盡可能地減小其數據項占有的內存空間。你可以給cache設置相對的或絕對的有效期,也可以設置優先級和衰變因子。然后,你就對你的全局數據狀態有了更大的控制能力,也能夠執行在低內存狀況下適度降級的特別方案。還有,就是,cache對象是線程安全的,不需要加鎖和解鎖。


#3 用get或post調用服務

網絡服務從根本上來說是一個你通過http來連接的一個網址(url)。當你為給定的網絡服務建立了一個代理類,除非有其他方面的說明,命令行工具wsdl.exe給你提供了一個類,這個類使用soap協議使得可以遠程調用網絡服務。

盡管soap協議被認為是調用遠程程序的標準,但是沒有什么可以阻止你使用簡單的get或者post方法來調用.net網絡服務。順便說一下,post命令傳遞soap有效負荷。

你可以在代理類中直接建立這個特征,只要當調用wsdl.exe 設備時,你轉換協議為httpget或者httppost就可以了。封包類的源代碼相應的調整。你也可以使用xmlhttprequest對象和簡單的腳本或者編譯的代碼來調用網絡服務(更多信息,見資源): set http = _createobject("microsoft.xmlhttp")
  http.open "get", "http://server/service.asmx/methodname", false
  http.send ""
  msgbox http.responsetext



通過使用xmlhttprequest,你可以通過win32,腳本,總的來說,非.net代碼來連接網絡服務。

#4 使用cookieless sessions

在asp.net中,session對象參考一個軟件配置實體,在那里你可以設置成進程中或者進程外模式。session對象讀取許多運行時設置,這些設置你可以存在web server的framework的安裝目錄,或者存在從web.config文件得來的應用程序的bin目錄。web.config文件來決定許多asp.net組件的設置。如果你放config.web的拷貝在你的應用程序的當地子目錄下,這個設置覆蓋掉在framework目錄中的默認設置。

你要配置的是session管理器是否能夠識別客戶端使用cookies的 session. 在應用程序的config.web文件中設置下面一行使session管理器能夠在不使用cookie的情況下工作。 <sessionstate cookieless="true" />




#5 使用定制的grid分頁

web form的datagrid控件有內置的支持分頁。它自動顯示一個分頁條,幾乎不用寫多少代碼,就可以顯示給定記錄大小的頁面。然而,默認的,所有必須的記錄隱藏在datagrid對象的datasource屬性中。這就意味 著你必須一次取回所有的數據。盡管當記錄很少時這不是什么問題,但是當有成千上萬條記錄時,這就變成了一個問題。在這種情況下,你就必須手工取回記錄,把他們存在磁盤里,而不是數據庫管理系統。

你必須通知datagrid這個特殊的行為。幸運的是,datagrid提供了一個allowcustompagination屬性,當這個屬性設置成為true時,就會大大改變這個控件的內置行為。這時,grid總是從頭到尾讀取從datasource屬性中找到的記錄。你應該用屬于當前頁的數據來補充這個容器。一般情況下,grid自己只取屬于這頁的從datasource屬性中取到的記錄。


#6 從數據庫中裝入關鍵字信息

datatable對象讓你設置特定表的內存中的主鍵。這個行為加快了在datatable和相關的dataview對象之間的搜索。另外一個好處就是阻止重復錄入,它干擾表的完整性。這樣,你在數據提交到數據庫做一個批處理更新之前就有足夠的時間來修正表,甚至向用戶提供適當的警告。

你可以在批處理代碼中手工設定這些信息: // ds is an existing dataset
datacolumn[] keys = new datacolumn[1];
datatable dt = ds.tables["mytable"];
keys[0] = dt.columns["id"];
dt.primarykey = keys;



你可以在填充數據集時自動設置和檢測主鍵信息。它是這樣實現的:你設置數據適配器的missingschemaaction屬性執行下面的查詢代碼來自動診測信息。 sqldataadapter da = new sqldataadapter(strcmd, strconn);
dataset ds = new dataset();
da.missingschemaaction = missingschemaaction.addwithkey;
da.fill(ds, "mytable");




#7 需要選擇的checkboxes

在asp中,你有幾個checkboxes,都有相同的名字: <input type="checkbox" name="foo" value="…">



你可以得到checkbox的相應的值從下面的行代碼: <% a = split(request.form("foo"), ",")  %>



request.form("foo")返回一個用逗號隔離的字符串,這個字符串是所有選擇項的串值形成的。你把這個字符串交給一個vbscript的分離函數,就得到一個易于管理的結構,比如數組。

同樣的代碼在asp.net中將沒有辦法運行。如果你使用<asp:checkbox>服務端控件。為了使它工作,使用htmlinputcheckbox控件,寫代碼如下: <type="checkbox" runat="server" name="foo" value="…">



即使asp:checkbox和input type="checkbox"服務端標簽等價于同樣的html代碼,asp.net確保輸出asp:checkbox和<asp>名字空間中的其它控件的標簽的唯一的id和名字。

#8 自動主表/詳細表瀏覽

如果你在windows forms應用程序中用datagrid控件來顯示主表/詳細表。其變化在于framework為你自動同步展示。

關鍵在于在兩個表之間建立數據關聯和用來定義詳細表的數據源的組合表達式。我們假設你有兩個表:customers 和 orders,其中都有custid字段。你按照ado .net datarelation對象建立一個關聯: // ds is an existing dataset
dim dc1, dc2 as datacolumn
dc1 = ds.tables("customers").columns("custid")
dc2 = ds.tables("orders").columns("custid")
dim r as datarelation
r = new datarelation("ordersbycustomer", dc1, dc2)
ds.relations.add(r)



不論何時你用datarow對象表示主表(customers)中的一行,在這種情況下,你可以根據關聯,使用datarow 的 getchildrows方法得到子表的數據。就windows forms而言,這個編程過程中使用下面的代碼: dgrid.datasource = ds
dgrid.datamember = "customers.ordersbycustomer"



當你用表達式比如mastertable.relation連接詳細子表,其內容就會自動地正確地更新。


#9 用類實現文件變更通知

.net把 win32文件通知類功能整合到filesystemwatcher類上來。這些核心類主要負責當檢測到系統文件層發生改變時通知客戶端應用程序。按照特定的參數,當文件建立、修改、重命名或者刪除時,通知對象發信號描述應用程序狀態。

對于win32程序來說,了解windows nt 和indows 2000下有關文件的名稱和有關事件的起因是困難的。所有這些在 .net中被filesystemwatcher類取代了。 filesystemwatcher watcher = new filesystemwatcher();
watcher.path = "c://";
watcher.filter = "*.txt";
watcher.notifyfilter = notifyfilters.lastwrite;



一旦對象被配置后,你開始檢測: watcher.enableraisingevents = true;



任何檢測到的事件激活了應用程序事件。你可以象如下記錄事件: watcher.changed += new filesystemeventhandler(onchanged);



事件處理程序參數提供你所需要的所有的文件和信息。


#10 編譯代碼

.net framework提供類,這些類可以讓你用指定的語言編譯代碼。它們封包在system.codedom.compiler名字空間里。下面代碼片斷顯示了如何得到運行在內存中的c#編譯器的實例: csharpcodeprovider csc = new csharpcodeprovider();
icodecompiler icc = csc.createcompiler();



接著,你將設置compilerparameters類的一些輸入參數: compilerparameters co = new compilerparameters();
co.outputassembly = "foo.exe";
co.referencedassemblies.add("system.dll");



你必須至少指明可執行的名稱,設置generateexecutable為false如果你想要一個dll, 并且增加集合列表供參考: icc.compileassemblyfromfile(co,csfile);

為了運行編譯過程,使用compileassemblyfromfile(),傳遞給它參數和源文件名。你可以使用類compilerresults以了解最新生成的集合的更多信息。

關于作者:
dino esposito是一個主要工作在意大利羅馬的培訓師和顧問。他也是即將被microsoft出版社發行的ado.net書籍的作者,他花費了大部分的時間在為wintellect網站教asp.net和ado.net課程。如果你有一些技術問題,你可以用[email protected]電子郵件地址聯系他。

商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大洼县| 绥滨县| 来宾市| 无棣县| 鸡东县| 华坪县| 宜良县| 武汉市| 合山市| 全南县| 东港市| 太康县| 霍林郭勒市| 尉犁县| 襄垣县| 长治县| 罗甸县| 山阳县| 萨嘎县| 万山特区| 佛山市| 随州市| 香河县| 桓台县| 灯塔市| 新平| 鄯善县| 塔河县| 八宿县| 太白县| 贡嘎县| 永兴县| 仲巴县| 桐城市| 容城县| 确山县| 师宗县| 博乐市| 上高县| 衡东县| 冕宁县|