日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用自定义参数

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用自定义参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在上篇http://mqingqing123.cnblogs.com/archive/2006/04/07/369020.html
介紹了ObjectDataSource的常規使用。

上次一個網友希望介紹一下自定義分頁的問題,本文說明如何使用ObjectDataSource自定義分頁、排序,你會發現ObjectDataSource的伸縮性很大,。不管是初學者還是具有一定經驗的用戶,ObjectDataSource總能夠給你提供能夠滿足你要求的功能。

?

??? 在數據分頁中,最簡單是利用GridView的分頁、排序功能,此功能不幾乎應該是確實不需要編寫代碼,稍微勾勾劃劃就能夠分頁、排序。然而當數據量很少時,以來此方法確實可以減輕程序員的負擔,但是當數據很多,例如記錄幾十萬、上百萬時,使用系統自帶的分頁將導致大量數據回復,因此使用自定義分頁就顯得更為有效。

概括起來,天天總結自定義數據分頁主要包含四種方式:
1)?使用臨時表――此方法被廣泛使用論壇CommunityServer、博客等開源代碼
2)?使用存儲過程――這個方法好像最初來自CSDN上的一篇,可以到如下網址查看博客圓里的一篇文章
http://genson.cnblogs.com/archive/2006/01/17/318882.html
3)?利用SQL語句選取有限數據分頁,此方法我用過,感覺有一些問題,還有待進一步證實。
4)?可以利用GirdView的客戶端到服務器的回調獲得新頁的數據,這是ASP.NET2.0新增的一個功能。

?

本文主要介紹第一種使用臨時表進行分頁。以后會介紹其它方式

?

下面是對上面文章的更改。代碼如下,使用臨時表進行自定義分頁:

?

public?List<Product> LoadAllProduct(int?startIndex,?int?maxRows,?string?sortedBy)

?

????{

?

????????List<Product> products =?new?List<Product>();

?

????????????SqlConnection?conn =?new?SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

?

???????????

?

????string?commandText =?@"

?

?????-- 為分頁建立一張臨時表

?

????CREATE TABLE #TempPageTable

?

????(

?

????????IndexId int IDENTITY (0, 1) NOT NULL,

?

?????????id int???

?

?????)

?

?

?

????-- 讀取數據插入臨時表

?

????INSERT INTO #TempPageTable

?

?????(

?

?????????[id]

?

?????)

?

?????SELECT

?

?????????[Productid]???

?

?????FROM Products";

?

?

?

?

?

?

?

?????????if?(sortedBy !=?"")

?

????????{

?

??????????????commandText +=?" ORDER BY "?+ sortedBy;

?

?????????}

?

?

?

?????????commandText +=?@"

?

????SET @totalRecords = @@ROWCOUNT

?

?

?

??????

?

????SELECT

?

?????????src.[ProductID],

?

?????????src.[ProductName],

?

?????????src.[CategoryID],

?

?????????src.[Price],

?

????????src.[InStore],

?

????????src.[Description]??

?

?????FROM Products src, #TempPageTable p

?

?????WHERE?

?

?????????src.[productid] = p.[id] AND

?

????????p.IndexId >= @StartIndex AND p.IndexId < (@startIndex + @maxRows)";

?

????????

?

????????if?(sortedBy !=?"") {

?

??????????????commandText +=?" ORDER BY "?+ sortedBy;

?

?????????}

?

?

?

?????????SqlCommand?command =?new?SqlCommand(commandText, conn);

?

?????????command.Parameters.Add(new?SqlParameter("@startIndex", startIndex));

?

?????????command.Parameters.Add(new?SqlParameter("@maxRows", maxRows));

?

?????????command.Parameters.Add(new?SqlParameter("@totalRecords",?SqlDbType.Int));

?

?????????command.Parameters["@totalRecords"].Direction =?ParameterDirection.Output;

?

?

?

?????????conn.Open();

?

?????????SqlDataReader?dr = command.ExecuteReader();

?

?????????while?(dr.Read()) {

?

??????????????Product?prod =?new?Product();

?

?

?

??????????????prod.ProductID = (int)dr["ProductID"];

?

??????????????prod.ProductName= (string)dr["ProductName"];

?

????????????prod.CategoryID = (int)dr["CategoryID"];

?

??????????????prod.Price = (decimal)dr["price"];

?

????????????prod.InStore=(Int16)dr["InStore"];

?

????????????prod.Description=(String)dr["Description"];

?

??????????????products.Add(prod);

?

?????????}

?

?

?

?????????dr.Close();

?

?????????conn.Close();

?

?

?

?????????_count = (int)command.Parameters["@totalRecords"].Value;

?

?

?

?????????return?products;

?

?????}

?

?

?

?

?

????public?int?CountAll()

?

????{

?

????????return?_count;

?

????}

?


簡單解釋如下:
1)這里定義了一個臨時表 #TempPageTable,臨時表的定義需要加“#”,臨時表的好處是自動創建,并在不需要時候進行銷毀。具體介紹請參考SQL的幫助系統。
2)在臨時表里我建立了一個索引印列IndexId和id列。如果你查看我的數據庫Producst表的設計可以看到該表包含一個ProductID列,該列是一個自增型標識種子,那么為什么還需要建立IndexId列?
這是因為Product表的ProductID列是一個自增形式,所以序號將會在你編輯時可能會打亂,例如原來產品記錄是1,2,3,4,5后來你刪除了一條記錄,例如5,那么當你再增加一條記錄時,新的序列號將是從6開始,而不會使用原來的5。
為了讓索引不斷號的自增,使用了自定義了自增的IndexId臨時表。
3)臨時表里的id列對應ProductID,正如你看到的,該id列插入的數據實際上來自Products表的ProductID列

?

????
下面是在頁面使用的源代碼:

?

<asp:ObjectDataSource?ID="ObjectDataSource1"?runat="server"?SelectMethod="LoadAllProduct"?TypeName="ProductBLL"?DataObjectTypeName="Product"

?

????????EnablePaging="True"?MaximumRowsParameterName="maxRows"?StartRowIndexParameterName="startIndex"?SelectCountMethod="CountAll"?SortParameterName="sortedBy"

?

????????></asp:ObjectDataSource>

?

????????&nbsp;&nbsp;<asp:GridView?ID="GridView1"?runat="server"?CellPadding="4"?Font-Names="Verdana"

?

????????????Font-Size="X-Small"?ForeColor="#333333"?GridLines="None"?DataSourceID="ObjectDataSource1"?AllowPaging="True"?AllowSorting="True">

?

????????????<FooterStyle?BackColor="#1C5E55"?Font-Bold="True"?ForeColor="White"?/>

?

具體的解釋請自己研究吧。

單擊此處源代碼下載:/Files/mqingqing123/ObjectDataSourceExample.rar


使用VS.NET2005或者VWD2005以“File System”放置打開,可以直接運行本文源代碼。
?

?

?

?

?

?

ObjectDataSource提供了六個參數列表占位符號,除此以外,還可以自定義自己的參數列表,如下:
1


<
SelectParameters>

?????? <asp:QueryStringParameter Name="CategoryName" QueryStringFiled="CategoryName" />

??????? <XXXX:MyCustomParam Name="Param2" SomeAttribute="SomeValue" />

??? </SelectParameters>

請注意上面粗體字體,它就是自定義的模式,如果要自定義參數列表,需要如下步驟
1)從Parameter派生
public class MyParameter : System.Web.UI.WebControls.Parameter

2)重載Evaluate和Clone方法

protected override object Evaluate(HttpContext context, Control control)

{

?? return "My value";

}

?

?

protected override Parameter Clone()

{

??? return new MyParameter(this);

}

下面是一個示例,來自國外一個人的博客

using System;

using System.Collections.Generic;

using System.Text;

using System.Web.UI.WebControls;

?

namespace ClassLibrary1

{

??? public class MyParameter : Parameter

??? {

??????? public MyParameter(string name, object value) : base(name)

??????? {

???? ???????this.MyProperty = value;

??????? }

?

?

??????? public MyParameter(string name, TypeCode type, object value) : base(name, type)

??????? {

??????????? this.MyProperty = value;

??????? }

?

?

??????? protected MyParameter(MyParameter original) : base(original)

??????? {

??????????? this.MyProperty = original.MyProperty;

??????? }

?

?

??????? protected override object Evaluate(HttpContext context, Control control)

??????? {

??????????? return "My value";

??????? }

?

?

??????? protected override Parameter Clone()

??????? {

??????????? return new MyParameter(this);

??????? }

?

?

??????? public string MyProperty

??????? {

??????????? get

??????????? {

??????????????? object obj = base.ViewState["MyProperty"];

?

??????????????? if (obj == null)

?????????????????? ?return string.Empty;

?

??????????????? return (string)obj;

??????????? }

??????????? set

??????????? {

??????????????? if (this.MyProperty != value)

??????????????? {

??????????????????? base.ViewState["MyProperty"] = value;

??????????????????? base.OnParameterChanged();

??????????????? }

??????????? }

??????? }

???? }

}

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的使用自定义参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜久久网 | 一区二区午夜 | 亚洲精选91| 国产精品视频一区二区三区 | 亚洲午夜在线播放 | 成年人久久 | 欧美精品乱码久久久久久按摩 | 黑人和白人做爰 | 青青草午夜 | 在线免费观看成人 | 韩日视频一区 | 91呦呦| 美女网站免费黄 | 激情综合网婷婷 | 男人添女人下部高潮视频 | 日本一级片免费看 | 精品国产无码AV | 欧美性猛交xxxx乱 | 黄色资源在线观看 | 欧美一区二区精品 | 中文理论片 | 成人精品一区二区三区在线 | 杨幂毛片午夜性生毛片 | 婷婷六月综合网 | 日韩va亚洲va欧美va久久 | 日韩精品极品视频在线观看免费 | 美女视频黄色在线观看 | 日日干天天射 | 日韩手机在线观看 | 久久爰| 欧美另类精品 | 亚洲一级片av| 成人免费看片入口 | 亚洲精品久久久久久久久 | 亚洲天堂一区二区三区四区 | 打开每日更新在线观看 | 91毛片网站 | 在线免费黄网 | 欧美精品在线视频 | 欧美色视频在线观看 | 欧美人妖乱大交 | 日韩精品一区二区电影 | 久久黄色av | 性日韩 | 谁有免费黄色网址 | 青青视频二区 | 麻豆一区二区三区四区 | 日韩第八页| 中日精品一色哟哟 | 欧美一级免费 | 天天毛片 | 五月婷婷婷 | 亚洲免费色视频 | 97视频人人| 久久av一区二区三区漫画 | 加勒比在线免费视频 | 桃色一区| 在线视频日韩精品 | aaaa视频 | 黄色精品视频在线观看 | 色吊丝中文字幕 | 日日躁夜夜躁狠狠久久av | 五月天伊人网 | 韩国久久久 | 色99在线| 国产精品人妻一区二区三区 | 五月天激情综合 | 黄色片特级 | 国产亚州av | 狂野少女电影在线观看国语版免费 | 手机av网 | √资源天堂中文在线视频 | 日韩在线视频看看 | 日本一区二区免费在线 | 久久久久久www | 91素人约啪| 91精品国产自产精品男人的天堂 | 骚av在线| 男人懂的网站 | 天天碰天天碰 | 91性生活| 精品一区二区三区精华液 | 久久成人18免费观看 | 丰满人妻一区二区 | 91久久精品国产91久久 | 在线观看国产精品入口男同 | 欧美精品国产一区二区 | 五月天丁香 | 亚洲av无码乱码在线观看富二代 | 日韩精品电影在线 | 亚洲激情图 | jiz亚洲| 亚a在线 | 毛片视频免费观看 | 亚洲欧美一区二区三区四区五区 | 一级黄色毛毛片 | 神马午夜伦理影院 | 欧美自拍一区 | 精品久久久久久久免费人妻 |