为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

如何使多个数据库的表格合并成一张表并显示在一个gridview中

2017-10-15 23页 doc 51KB 468阅读

用户头像

is_654168

暂无简介

举报
如何使多个数据库的表格合并成一张表并显示在一个gridview中如何使多个数据库的表格合并成一张表并显示在一个gridview中 篇一:DataSet多表关联实现本地数据复杂的查询 如果要显示两张数据库表的记录,最简单的方法是检索时 将两张表中你要的数据一次检索出来,放入同一个 DataTable来显示。 如果要显示两个以上DataTable中的数据,则需要将 DataTable放入DataSet并建立relation就可以显示了。 下面是刚做的一个例子。另外,父表一定要有主键。建 立关联时要用主键。 private void button1_Click(object sende...
如何使多个数据库的表格合并成一张表并显示在一个gridview中
如何使多个数据库的表格合并成一张表并显示在一个gridview中 篇一:DataSet多表关联实现本地数据复杂的查询 如果要显示两张数据库表的记录,最简单的是检索时 将两张表中你要的数据一次检索出来,放入同一个 DataTable来显示。 如果要显示两个以上DataTable中的数据,则需要将 DataTable放入DataSet并建立relation就可以显示了。 下面是刚做的一个例子。另外,父表一定要有主键。建 立关联时要用主键。 private void button1_Click(object sender, System.EventArgs e) { DataTable dtName = new DataTable(NameDt); dtName.Columns.Add(ID, typeof(string)); dtName.Columns.Add(Name, typeof(string)); dtName.PrimaryKey = new DataColumn[] 1 {dtName.Columns[ID] }; dtName.Rows.Add(1, Name1); DataTable dtAddress = new DataTable(AddressDt); dtAddress.Columns.Add(ID, typeof(string)); dtAddress.Columns.Add(Address, typeof(string)); dtAddress.Rows.Add(1, Address1); dtAddress.Rows.Add(1, Address2); DataSet ds = new DataSet(); ds.Tables.Add(dtName); ds.Tables.Add(dtAddress); // 关键~建立表之间的关联 ds.Relations.Add(ForName, dtName.Columns[ID], dtAddress.Columns[ID]); // 在子表中添加计算列,引用父表的数据。 dtAddress.Columns.Add(Name, typeof(string), Parent(ForName).Name); dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = ds; dataGridView1.DataMember = AddressDt; } DataSet多表关联实现本地数据复杂的查询 [c-sharp] view plaincopy 1. DataSet ds = new DataSet(); 2. 2 3. //提取第一个表 放在ds中 4. dp.CommandText = SELECT * FROM ss_RolesInAction; 5. ds.Tables.Add(dp.ExecuteDataTable(ss_RolesInAction));6. 7. //提取第二个表 放在ds中 8. dp.CommandText = SELECT * FROM ss_Action; 9. ds.Tables.Add(dp.ExecuteDataTable(ss_Action)); 10. 11. //提取第三个表 放在ds中 12. dp.CommandText = SELECT * FROM as_SiteMap; 13. ds.Tables.Add(dp.ExecuteDataTable(as_SiteMap)); 14. 15. //建立关系 ss_Action.FID = ss_RolesInAction.FActionID ,ss_RolesInAction.FActionID为外键 16. ds.Relations.Add(relation1, ds.Tables[1].Columns[FID], ds.Tables[0].Columns[FActionID]); 17. //建立关系 as_SiteMap.ID = ss_RolesInAction.FNodeID , ss_RolesInAction.FNodeID 为外键 3 18. ds.Relations.Add(relation2, ds.Tables[2].Columns[ID], ds.Tables[0].Columns[FNodeID]); 19. 20. 21. //查询条件测试1:对父表查询获取子表测试 22. //条件为 ss_Action.FID 等 于 6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2 的或 是 ss_RolesInAction.FActionID 等于 DB893F4E-B411-4FC0-9735-D5E9B7823083 或是 as_SiteMap.id 等于7的 23. //因为已经建立三个表的关系,所以,无论查询条件是 什么 都会跟上 关系中的条件 即: 24. //ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID 25. //当我们指定的查询条件为空时会 根据 关联关系查 询 以下条件中的 完整关联关系是这样的 26. //(ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID ) and ss_Action.FID='6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2' or ss_RolesInAction.FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or as_SiteMap.id=7 4 27. DataView dv = ds.Tables[0].DefaultView; 28. dv.RowFilter = parent(relation1).FID='6E7BB6B5-4DDA-4BB9-A156-7 1288CEF16B2' or FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or parent(relation2).id=7; 29. 30. //查询条件测试2:对子表查询获取父表测试 31. //因为子表与父表是 多对一 的关系所以 我们对子表 查询时 会返回多个值所 以 使用 MAX 32. DataView dv = ds.Tables[1].DefaultView; 33. dv.RowFilter = max(child(relation1).FActionID) in ('FFD953C4-09 20-4558-B87F-3A25CFB15754','FC5C91F5-45ED-4B3E-8E14-C2391B9A6B14') ;//这个查询条件中无 法关联 as_SiteMap查询条件 因为没有 查询表 as_SiteMap和返回 表 ss_Action 的条件 34. 5 35. this.GridView1.DataSource = dv; 36. this.GridView1.DataBind(); 在Winform中将数据库中的多张表同时显示在多个 DataGridView中的方法 2009-08-28 12:11:05| 分类: |举报|字号 订阅 方法一: 使用SqlDataAdapter向DataGridView添加数据时,可 以在其参数中添加多条SQL语句,查询出的结果分别保存 在 多个DataSet中,在为多个DataGridView指定数据源时, 将DataSet中的多张表依次赋给每个DataGridVie即可。 关键代码: private void Form1_Load(object sender, EventArgs e) { using (SqlDataAdapter da = new SqlDataAdapter(select * from Product;select * from Product, DBService.Conn)) { DataSet ds = new DataSet(); da.Fill(ds); this.dataGridView1.DataSource = ds.Tables[0]; 6 this.dataGridView2.DataSource = ds.Tables[1]; } } 方法二: 在使用SqlDataReader向DataGridView添加数据时,也 是在其参数中添加多条SQL语句,但不同的是,在为 DataGridView指定数据源时,可以利用DataReader对象 的Read()和NextResult()方法,并且以for循环的方式来 显示在多个DataGridView中; 关键代码: private void button1_Click(object sender, EventArgs e) { using (SqlCommand cmd = new SqlCommand(select * from jobs;select * from sales, DBconnection.Conection)) { using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { do { 7 while (dr.Read()) { Console.WriteLine(dr[0].ToString()); } } while (dr.NextResult()); } }} ? Writer:cheng ? 篇二:海量(大量)数据GridView显示高效率分页实现方法 问: GridView显示海量数据时效率极其低,每次要从数据库从取出海量数据,这明显不现实。 解决: 显示多少,就从数据库中读取多少数据,即每次取GridView显示的一个页面数据,点击下一页是,再取下一页相应的数据。 真的是很简单,但如果对asp.net不熟悉的人来说,还是有点难度。 就比如说:当页面刷新时,怎样使一个变量的值保持不变呢,很晕是吧 下面我们说分析实现方法: 8 1、刷新页面,保持变量值不变 先讲怎样在刷新页面是使一个变量值保持不变,以前我都采用页面传值法,总觉得有点怪,本来就是本页的数据还要通过页面传值来保存。 后来在网上发现VewState这东东,有点像Session,用法基本上一样。 他们的区别是:Session是在页面之间,而ViewState是在它自己的页面保持一个值。 用法: ViewState[PageCounts] = 3; 下次要用时直接取出来就OK了。 2、GridView海量数据高效分页实现代码 下面代码来自互联网 const int PageSize=20;//定义每页显示记录 int PageCount,RecCount,CurrentPage,Pages,JumpPage;// 定义几个保存分页参数变量 private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { RecCount = Calc();//通过Calc()函数获取总记录数 PageCount = RecCount/PageSize + OverPage(); 9 //计算总页数(加上OverPage()函数防止有余数造成显示 数据不完整) ViewState[PageCounts] = RecCount/PageSize - ModPage(); //保存总页参数到ViewState(减去ModPage()函数防止 SQL语句执行时溢出查询范围,可以用存储过程分页算法来 理解这句) ViewState[PageIndex] = 0;//保存一个为0的页面索引值到 ViewState ViewState[JumpPages] = PageCount; //保存PageCount到ViewState,跳页时判断用户输入数是 否超出页码范围 //显示LPageCount、LRecordCount的状 态 LPageCount.Text = PageCount.ToString(); LRecordCount.Text = RecCount.ToString(); //判断跳页文本框失效 if(RecCount <= 20) gotoPage.Enabled = false; TDataBind();//调用数据绑定函数TDataBind()进行数据 绑定运算 } } //计算余页 10 public int OverPage() { int pages = 0; if(RecCount%PageSize != 0) pages = 1; else pages = 0; return pages; } //计算余页,防止SQL语句执行时溢出查询范围 public int ModPage() { int pages = 0; if(RecCount%PageSize == 0 && RecCount != 0) pages = 1; else pages = 0; return pages; } /* *计算总记录的静态函数 *本人在这里使用静态函数的理由是:如果引用的是静态 11 数据或静态函数,连接器会优化生成代码,去掉动态重定位 项(对 海量数据表分页效果更明显)。 *希望大家给予意见、如有不正确的地方望指正。 */ public static int Calc() //Calc()函数获取总记录数 { int RecordCount = 0; SqlCommand MyCmd = new SqlCommand(select count(*) as co from redheadedfile,MyCon()); SqlDataReader dr = MyCmd.ExecuteReader(); if(dr.Read()) RecordCount = Int32.Parse(dr[co].ToString()); MyCmd.Connection.Close(); return RecordCount; } //数据库连接语句(从Web.Config中获取) public static SqlConnection MyCon() { SqlConnection MyConnection = new SqlConnection(ConfigurationSettings.AppSettings[DSN]); MyConnection.Open(); 12 return MyConnection; } //对四个按钮(首页、上一页、下一页、尾页)返回的CommandName值进行操作private void Page_OnClick(object sender, CommandEventArgs e) { CurrentPage = (int)ViewState[PageIndex]; //从ViewState中读取页码值保存到CurrentPage变量中进行参数运算 Pages = (int)ViewState[PageCounts];//从ViewState中读取总页参数运算 string cmd = e.CommandName; switch(cmd)//筛选CommandName { case next: CurrentPage++; break; case prev: CurrentPage--; break; case last: CurrentPage = Pages; break; 13 default: CurrentPage = 0; break; } ViewState[PageIndex] = CurrentPage; //将运算后的CurrentPage变量再次保存至ViewState TDataBind();//调用数据绑定函数TDataBind() } private void TDataBind() { CurrentPage = (int)ViewState[PageIndex]; //从ViewState中读取页码值保存到CurrentPage变量中进行按钮失效运算 Pages = (int)ViewState[PageCounts]; //从ViewState中读取总页参数进行按钮失效运算 //判断四个按钮(首页、上一页、下一页、尾页)状态 if (CurrentPage + 1 1) { Fistpage.Enabled = true; Prevpage.Enabled = true; } else { 14 Fistpage.Enabled = false; Prevpage.Enabled = false; } if (CurrentPage == Pages) { Nextpage.Enabled = false; Lastpage.Enabled = false; } else { Nextpage.Enabled = true; Lastpage.Enabled = true; } //数据绑定到DataList控件 DataSet ds = new DataSet(); //核心SQL语句,进行查询运算(决定了分页的效率:) SqlDataAdapter MyAdapter = new SqlDataAdapter(Select Top +PageSize+ * from redheadedfile where id not in(select top +PageSize*CurrentPage+ id from redheadedfile order by id asc) order by id asc,MyCon()); MyAdapter.Fill(ds,news); 15 篇三:C#如何读取Excel表格数据并显示到GridView控 件 C#如何读取Excel表格数据并显示到GridView控件 2008/05/06 00:36 近日,有个项目,需要用 Web 形式将 Excel 表格中的 数据导入到数据库中,为了简化问题的解决,现在先将表中 数据导入到 GridView 控件上( 代码如下: protected void Button1_Click(object sender, EventArgs e) ...{ string filepath=FileUpload1.PostedFile.FileName; ReadExcel(filepath, gdBom); } public void ReadExcel(string sExcelFile,GridView dgBom) ...{ DataTable ExcelTable; DataSet ds = new DataSet(); //Excel的连接 OleDbConnection objConn = new OleDbConnection(Provider=Microsoft.Jet.OLEDB.4.0;Data Source= + sExcelFile + ; + Extended Properties=Excel 8.0;); 16 objConn.Open(); DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); string tableName = schemaTable.Rows[0][2].ToString().Trim();//获取 Excel 的 表名,默认值是sheet1 string strSql = select * from [ + tableName + ]; OleDbCommand objCmd = new OleDbCommand(strSql, objConn);OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn); myData.Fill(ds, tableName);//填充数据 dgBom.DataSource =ds; dgBom.DataBind(); objConn.Close(); ExcelTable = ds.Tables[tableName]; int iColums = ExcelTable.Columns.Count;//列数 int iRows = ExcelTable.Rows.Count;//行数 //定义二维数组存储 Excel 表中读取的数据 string[,] storedata = new string[iRows, iColums]; for(int i=0;i<ExcelTable.Rows.Count;i++) 17 for (int j = 0; j < ExcelTable.Columns.Count; j++) ...{ //将Excel表中的数据存储到数组 storedata[i, j] = ExcelTable.Rows[i][j].ToString(); } int excelBom = 0;//记录表中有用信息的行数,有用信息是 指除去表的标题和表的栏目,本例中表的用用信息是从第三 行开始 //确定有用的行数 for (int k = 2; k < ExcelTable.Rows.Count; k++) if (storedata[k, 1] != ) excelBom++; if (excelBom == 0) ...{ Response.Write(<script language=javascriptalert(' 您导入的表格不合~')</script); } else ...{ //LoadDataToDataBase(storedata,excelBom)//该函数主要 负责将 storedata 中有用的数据写入到数据库中,在此不是 问题的关键省略 } } 18 运行效果如下图:选择,,,表的路径,点确定后 类别:c# | 上一篇:验证文件上传有效类型的正则表达... 下一篇:C#数值结果表(格式化字符串) 相关文章: ? sun:将gridview控件中数据以指? 怎样将Gridview控件的内容导出| 添加到搜藏 | 分享到i贴吧 | 浏览(1391) | 评论 (7) 定... 为... 用户控件上的GridView如何导? 类型GridView的控件 必须放在... ? 入,... ? ? 使用Gridview空间导出到Excel,Gr... ? ? ASP.net的GridView控件中的数据... ASP.NET 2.0,C#----利用 GridView... GridView 不使用数据源控件,导? 出... 更多 使用C#读取Word表格数据 读取Word表格数据的方法 1//将读取Word表格封装与方法中。 扩展GridView 控件—支持 Excel ... VB,C# GridView导出到? excel,data... 19 2public string ReadWord(string fileName, int rowIndex, int colIndex) 3{ 4 ApplicationClass cls = null; 5 Document doc = null; 6 7 Table table = null; 8 object missing = Missing.Value; 9 10 object path = fileName; 11 cls = new ApplicationClass(); 12 13 try 14 { 15 doc = cls.Documents.Open 16(ref path, ref missing, ref missing, ref missing, 17ref missing, ref missing, ref missing, ref missing, 18ref missing, ref missing, ref missing, ref missing, 19ref missing, ref missing, ref missing, ref missing); 20 table = doc.Tables[1]; 21 string text = table.Cell(rowIndex, colIndex).Range.Text.ToString(); 22 text = text.Substring(0, 20 text.Length - 2); //去除尾部的mark 23 24 25 26 return text; } catch (Exception ex) { 27 28 29 30 31 return ex.Message; } finally { 32 if (doc != null) 33doc.Close(ref missing, ref missing, ref missing); 34 cls.Quit(ref missing, ref missing, ref missing); 35 } 36} 这个方法用于读取Word表格中某个单元格的数据。其中 的参数分别为文件名(包括路径),行号,列号。 ============================================ 由于考虑到代码复用,我将代码写成了一个类。此外,通 过审视代码可以发现,如果要多次读取同一文件中的不同的 单元格数据会造成频繁的打开、关闭Word程序;因此,我 21 将代码进行优化。在我做优化的时候突然想起来ADO.NET的SqlConnection和SqlCommand类。这两个类我常常用做数据库操作,一般用到的方法顺序都是:打开数据库连接,执行数据库查询,关闭数据库连接。我没有使用到两个类,我将这段代码封装于一个类中。使用Open、Close控制Word文档的打开和关闭,使用WordTableRead方法读取表格中的数据。这样对于读取多个单元格中的数据,每次只需要打开、关闭一次Word程序即可,大大的节约了资源的开销和节省了时间,提高的读取效率。此外,对于代码的优化还有可以读取指定表格中数据。下图显示了这个类的结构,代码及相应注释附在图的下方: class WordTableRead 2{ 3 private string fileName; 4 private ApplicationClass cls = null; 5 private Document doc = null; 6 private Table table = null; 7 private object missing = Missing.Value; 8 //Word是否处于打开状态 9 private bool openState; 10 11 22 12 /**//// <summary 13 /// 自定义构造方法 14 15 16 17 /// </summary /// <param name=fileName包含路径的文件名</param public WordTableRead(string fileName) { 18 this.fileName = fileName; 19 } 20 21 22 23/**//// <summary /// 打开Word文档 /// </summary 24 public void Open() 25 { 26 object path = fileName; 27 cls = new ApplicationClass(); 28 try 29 { 30doc = cls.Documents.Open 23 31 (ref path, ref missing, ref missing, ref missing, 32 ref missing, ref missing, ref missing, ref missing, 33 ref missing, ref missing, ref missing, ref missing, 34 ref missing, ref missing, ref missing, ref missing); 35openState = true; 36 } 37 catch 38 { 39openState = false; 40 41 42 43 } } /**//// <summary 44 /// 返回指定单元格中的数据 45 /// </summary 46 /// <param name=tableIndex表格号</param 47 /// <param name=rowIndex行号</param 48 /// <param name=colIndex列号</param 49 /// <returns单元格中的数据</returns 50 public string ReadWord(int tableIndex, int rowIndex, int colIndex) 51 { 24 52 //Give the value to the tow Int32 params. 53 54 try 55 { 56if (openState == true) 57{ 58 table = doc.Tables[tableIndex]; 59 str ing text = table.Cell(rowIndex, colIndex).Range.Text.ToString(); 60 text = text.Substring(0, text.Length - 2); //去除尾部的mark 61 return text; 62} 25
/
本文档为【如何使多个数据库的表格合并成一张表并显示在一个gridview中】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索