如何在DataSet中动态添加数据

如何在DataSet中动态添加数据,第1张

我用的一直都是FineReport,它比较方便,不过散带既然楼主问的是fastreport,这里我就不谈FineReport了。要创建fastreport的主从报表,需要建立两个数据集。一个是主表的数据集,另外一个是一个明细表的数据集;根据下面的截图来创建fastreport报表。首先,运行报表设计器,创建一个空白报表。为了添加一个明细的数据集,需要调用 "Configure Bands" 窗口。点击 "Configure Bands" 按钮便可实现调用,如图所示,也可以通过"Report|Configure Bands..." 菜单项来调用"Configure Bands"窗口。配置窗口中展示了数据集结构:选择"Data" 数桥迅据集,如图所示,单击鼠标右键以显示上下文菜单,并选择”data“band,冲消芦接下来,嵌套数据便被添加到所选择的数据集中。按“close”按钮关闭窗口。你会发现报表模版便成下面的样子;将band与相应的数据源连接,并将数据列置于bands上。我们将使用两个数据源:分类和产品。运行报表通过这种方法,你可以创建一个带有无线嵌套数据的主从报表类型。

使用方法

1、颂橘创建DataSet对象

DataSet ds = new DataSet()

DataSet ds = new DataSet("DataSetName")

2、用数据集橘绝填充DataSet

最常用的是DataAdapter对象的Fill()方法给他填充数据

(1)

DataSet ds = new DataSet()

SqlDataAdapter adapt = new SqlDataAdapter(sqlcmd,con)

adapt.Fill(ds,"mytest")

(2)

DataSet ds=new DataSet()

DataTable dt=new DataTable("newTable")

ds.Tables.Add(dt)

(3)

DataSet ds=new DataSet()

DataTable dt=ds.Tables.Add("newTable")

3、访问DataSet中的表、行和列 值

(1): 访问每个 DataTable

按表名访问:ds.Tables["mytest"] //指定DataTable对象mytest(即访问DataSet中名为mytest的DataTable)

按索引(索引基于0的)访问:ds.Tables[0] //指定DataSet中的第一个DataTable

(2): 访问DataTable中的行

ds.Tables["mytest"].Rows[n] //访问mytest表 的第n+1行(行的索引是从0开始的)

ds.Tables[i].Rows[n] //访问DataSet中的第i+1个DataTable 的第n+1列(列的索引是从0开始的)

(3): 访问DataTable中的某个元素

ds.Tables["mytest"].Rows[n][m] //访问mytest表的第n+1行第m+1列的元素

ds.Tables[i].Rows[n][m] //访问DataSet中的第i+1个DataTable 表的第n+1行第m+1列的元素

ds.Tables["mytest"].Rows[n][name] //访问mytest表的第n+1行name列的元素

ds.Tables[i].Rows[n][name] //访问DataSet中的第i+1个DataTable 表的圆樱姿第n+1行name列的元素

(4): 取DataTable中的列名

ds.Tables["mytest"].Columns[n] //取出mytest表的n+1列列名

ds.Tables[i].Columns[n]

4、实例

using System

using System.Collections.Generic

using System.Text

using System.Data.SqlClient

using System.Data

namespace sqlconnection1

{

class Program

{

private void SQLConnectionF(string source, string select)

{

//创建连接

SqlConnection con = new SqlConnection(source)

SqlDataAdapter adapt = new SqlDataAdapter(select,con)

try

{

con.Open()

Console.WriteLine("connection is successful!")

}

catch (Exception e)

{

Console.WriteLine("connection error is :{0}", e.ToString())

}

//创建DataSet

DataSet ds = new DataSet()

//将数据添加到DataSet中

adapt.Fill(ds,"mytest")

//取出mytest表各列名

Console.WriteLine("{0,-15} {1,-10} {2,-10}",ds.Tables["mytest"].Columns[0],

ds.Tables["mytest"].Columns[1],ds.Tables["mytest"].Columns[2])

//输出mytest表中第六行

DataRow row1 = ds.Tables["mytest"].Rows[5]

Console.WriteLine("{0,-15} {1,-10} {2,-10}",row1[0],row1[1],row1[2])

//输出mytest表中第五行的第二列的值

DataRow row2 = ds.Tables["mytest"].Rows[4]

Console.WriteLine(" {0,-25} ", row2[1])

//下列两种方法等效都等同于row2[1](即第五行的第二列的值)

Console.WriteLine(" {0,-25} ", ds.Tables["mytest"].Rows[4][1])

Console.WriteLine(" {0,-25} ", ds.Tables["mytest"].Rows[4]["number"])

//输出DataSet中的所有数据

foreach (DataRow row in ds.Tables["mytest"].Rows)

{

Console.WriteLine("{0,-15} {1,-10} {2,-10} {3}",row["name"] ,

row["number"] , row["low"] , row["high"])

//取第三列的值

Console.WriteLine("{0,-15} ", row[3])

}

Console.ReadLine()

con.Close()

}

static void Main(string[] args)

{

string sou = "server=duanyf\\SQLEXPRESS" + "Initial Catalog=master" + "UID = sa" + "Password = dyf123"

string sel = "SELECT name,number,low,high From dbo.spt_values"

Program sqlcon = new Program()

sqlcon.SQLConnectionF(sou, sel)

}

}

}

你可以把dataset当成数据库,只不过它是存储在内存里的临时数据库,一个中间位置的“虚拟”数据库。所以二者没有所谓“添加到”的概念(同等级的)。

让相对应的dataset和数据库挂钩.就是先用ado.net连接数据库。然后new一个dataset就行了.

ado.net连接如果不会自己搜下,很多的.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11995950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存