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

首頁 > 編程 > .NET > 正文

怎樣在Visual C# .NET中實現一個DataSet的不同記錄的選取

2024-07-10 13:03:13
字體:
來源:轉載
供稿:網友

怎樣在visual c# .net中實現一個dataset的不同記錄的選取
來自:microsoft knowledge base article – 326176,地址: http://support.microsoft.com/default.aspx?scid=kb;en-us;326176

摘要:

這是一篇基礎性由淺入深的文章,這篇舉例說明了怎樣實現并怎樣使用一個datasethelper類,該類使用簡潔代碼來創建一個新的使某個datatable對象指定的某列的的值具有唯一性的datatable對象。

????? 為了實現這個目的,你可以使用selectdistinct這個公開方法,也可以使用一個私有的通過比較可能包含null值(dbnull.value)的字段的輔助方法。

?????? datasethelper類包含一個dataset成員變量,你可以隨意的指定現有的一個dataset對象作為這個dataset成員的變量。如果這個成員變量是一個有效的dataset,任一一個selectdistinct方法創建的datatable對象都能被填充到這個dataset里。那樣,這個方法就請求返回涉及的datatable對象。

要求:

下列清單列出的是推薦的硬件、軟件、網絡基礎設施和必須的補丁包:

(1)、microsoft windows xp, windows 2000, or windows nt 4.0 service pack 6a

(2)、microsoft visual studio .net

這篇文章假設你已熟悉下面的主題:

(1)、visual c# .net的語法

(2)、ado.net基本原理和語法

datasethelper 構造類:

(1)、開始microsoft visual studio .net。

(2)、在文件(file)菜單,點新建(new),和然后點擊項目(project)。

(3)、在新建項目(new project)對話框, 點擊visual c#項目(visual c# projects)下的項目類型(project types),然后點擊類庫(class library)下的模板(templates)。

(4)、在名稱欄里填上datasethelper。

(5)、用以下代碼替換類代碼:

public class datasethelper

{

???????? public dataset ds;

???????? public datasethelper(ref dataset dataset)

???????? {

???????? ??????? ds = dataset;

???????? }

???????? public datasethelper()

???????? {

???????? ??????? ds = null;

???????? }

}

你可以用2次重載的構造函數來創建一個帶或不帶一個有效的dataset的實例類。因為類是涉及一個有效的dataset,那么這個方法返回的datatable對象這就自動的填充到這個dataset里。

注: 增加下面代碼在代碼窗口的頂部:

using system.data;

?

selectdistinct 方法:

這個部分包含代碼為公開的selectdistinct方法和私有的columnequal輔助方法。

(1)、在類定義里增加下面的私有方法,該方法同樣被用在其他的datasethelper 文章里,它被用做來比較字段的值(包括null值) 。

private bool columnequal(object a, object b)

{

???????? ?? // compares two values to see if they are equal. also compares dbnull.value.

??????? // note: if your datatable contains object fields, then you must extend this

??????? // function to handle them in a meaningful way if you intend to group on them.

???????????????????????????

??????? if ( a == dbnull.value && b == dbnull.value ) //? both are dbnull.value

??????????? return true;

??????? if ( a == dbnull.value || b == dbnull.value ) //? only one is dbnull.value

??????????? return false;

??????? return ( a.equals(b) );? // value type standard comparison

}

(2)、在類定義里增加下面的公開方法。這個方法復制你選定的字段的互異值到一個新的datatable里。如果這個字段包含null值,在目標列里的一條記錄里也會包含null值。

public datatable selectdistinct(string tablename, datatable sourcetable, string fieldname)

{??????

??????? datatable dt = new datatable(tablename);

??????? dt.columns.add(fieldname, sourcetable.columns[fieldname].datatype);

???????????????????????????

??????? object lastvalue = null;

??????? foreach (datarow dr in sourcetable.select("", fieldname))

??????? {

??????????? if (? lastvalue == null || !(columnequal(lastvalue, dr[fieldname])) )

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

??????????????? lastvalue = dr[fieldname];

??????????????? dt.rows.add(new object[]{lastvalue});

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

??????? }

??????? if (ds != null)

??????????? ds.tables.add(dt);

??????? return dt;

}

測試應用

(1)、保存并編譯你先前創建的這部分的datasethelper類,然后關閉解決方案。

(2)、在下面的步驟里在visual studio .net里創建一個新的visual c# windows form程序:

a、啟動 visual studio .net;

b、在文件(file)菜單,點新建(new),和然后點擊項目(project)。

c、在新建項目(new project)對話框, 點擊visual c#項目(visual c# projects)下的項目類型(project types),然后點擊windows應用程序(windows application)下的模板(templates)。

(3)、在解決方案資源管理器里右擊解決方案,然后點擊添加現有項目,加入datasethelper這個項目。

(4)、在項目菜單里,點擊項目依賴項(add reference)。

(5)、在項目依賴項對話框里,選中依賴項(projects)標簽,然后增加這個datasethelper項目和這個windows form程序的關系。

(6)、在窗口設計界面里,從工具箱里拖拉一個button控件和一個datagrid控件到窗體上,指定這個按鈕名為btnselectdistinct,繼續保持datagrid控件的默認名字(datagrid1)。

(7)、窗體代碼界面里,在代碼窗口頂部增加下面的引用聲明:

using system.data;

(8)、在窗體的定義增加下面的變量聲明:

dataset ds;

datasethelper.datasethelper dshelper;

(9)、增加下面的構造代碼(在the initializecomponent();的下面):

ds = new dataset();

dshelper = new datasethelper.datasethelper(ref ds);

?

// create source table

datatable dt = new datatable("orders");

dt.columns.add("employeeid", type.gettype("system.string"));

dt.columns.add("orderid", type.gettype("system.int32"));

dt.columns.add("amount", type.gettype("system.decimal"));

???????????????????????????

dt.rows.add(new object[] {"sam", 5, 25.00});

dt.rows.add(new object[] {"tom", 7, 50.00});

dt.rows.add(new object[] {"sue", 9, 11.00});

dt.rows.add(new object[] {"tom", 12, 7.00});

dt.rows.add(new object[] {"sam", 14, 512.00});

dt.rows.add(new object[] {"sue", 15, 17.00});

dt.rows.add(new object[] {"sue", 22, 2.50});

dt.rows.add(new object[] {"tom", 24, 3.00});

dt.rows.add(new object[] {"tom", 33, 78.75});

?

ds.tables.add(dt);

(10)、增加下面的代碼在btnselectdistinct.click的事件里:

dshelper.selectdistinct("distinctemployees", ds.tables["orders"], "employeeid");

datagrid1.setdatabinding(ds, "distinctemployees");

(11)、運行這個程序,點擊按鈕一次,觀察datagrid綁定上從代碼生成的表和數據。

注意:你只能點擊btnselectdistinct一次。如果你點擊這個按鈕超過一次的話,你將收到一條錯誤信息——你2次都在嘗試添加同一個表。

進一步的想法:

你用這個功能只能篩選一個字段為互異,可是你可以類似性的擴展到多個字段。做為另一種選擇,你可以調用creategroupbytable、insertgroupbyinto, 和 selectgroupbyinto 方法,通過使用group by-type的函數得到同樣的結果。

?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吴川市| 玉林市| 屏东县| 玉山县| 普定县| 历史| 日喀则市| 黄龙县| 宜春市| 攀枝花市| 郑州市| 西平县| 虹口区| 广宗县| 新余市| 慈利县| 澄城县| 曲阜市| 逊克县| 乌拉特前旗| 大厂| 清苑县| 会昌县| 勐海县| 中超| 安达市| 若尔盖县| 大港区| 襄汾县| 铁岭市| 方正县| 绥化市| 娱乐| 广丰县| 大化| 休宁县| 江华| 聂拉木县| 巴林左旗| 县级市| 大埔区|