C#中如何用datagridview实现多表联查?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-03
C#的winform怎么用datagridview实现多表查询显示

string strsql = "select a.* ,b.*,c.* from A a,B b,C c where a.sno = b.son and b.cno=c.cno";
。。。ado.net操作得到datatable1
datagridview1.DataSource = datatable1;

这种情况是你的SQL语句写错了,或者确实是两表主外键对应不上

如果要显示两张数据库表的记录,最简单的方法是检索时将两张表中你要的数据一次检索出来,放入同一个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[] {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";
}

打开数据库·视图··右键新建视图··
然后拖出你要查询的表··
只需你点击要查询的字段··把sql语句复制过去执行就好了·!

create table ClassInfo
(
cId int identity primary key,
cName varchar(50) not null
)
go
create table StuInfo
(
sId int identity primary key,
sName varchar(50) not null,
sCId int references ClassInfo(cId)
)
把sql语句告诉你。
string sql ="select sId,sName,(select cName from ClassInfo where cId=sCId) as cName from StuInfo";

引用一楼数据结构:
*****************************************
create table ClassInfo
(
cId int identity primary key,
cName varchar(50) not null
)
go
create table StuInfo
(
sId int identity primary key,
sName varchar(50) not null,
sCId int references ClassInfo(cId)
)
把sql语句告诉你。
string sql ="select sId,sName,(select cName from ClassInfo where cId=sCId) as cName from StuInfo";
*****************************************

select A.sId,A.sName,B.cName from StuInfo AS A(nolock)
inner join ClassInfo AS B(nolock)
on A.sCID=B.cID

直接通过类似这条语句的SQL脚本将需要的多张表数据联合查询后作为一张表返回到前台,然后通过datagridview显示出来就OK了.

  • c的大写字母是什么?
    答:c的大写字母是C。占四线格的中格,注意要留出一个缺口,不要封住。26个字母英语大小写分别为Aa、Bb、Cc、Dd、Ee、Ff、Gg、Hh、Ii、Jj、Kk、Ll、Mm、Nn、Oo、Pp、Qq、Rr、Ss、Tt、Uu、Vv、Ww、Xx、Yy、Zz。书写英语字母时要按照字母的笔画和字母在三个格中所占据的位置书写,同时每个字母都...
  • c是什么意思?
    答:c++的具体含义如下:C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C++不仅拥有...
  • c是什么意思?
    答:c++的具体含义如下:C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C++不仅拥有...
  • C是什么意思?
    答:C表示组合数。C(n,m) 表示n选m的组合数,其中n是下标 , m是上标 (C上面m,下面n)。nCk是一个整体,是n个元素中,取k个元素的取法的个数,也叫n个元素中,取k 个k组合数,(C代表组合),算法是:nCk=n!/k!(n-k)!=n(n-1)……(n-k+1)/k!等于从n开始连续递减的m个自然...
  • c是什么意思
    答:c++的具体含义如下:C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C++不仅拥有...
  • c是什么?
    答:化学中C表示物质的量浓度(摩尔浓度),是一种常用的溶液浓度的表示方法,为溶液中溶质的物质的量除以混合物的体积。以上面公式中,C(B)代表溶质的物质的量浓度,n(B)代表溶质的物质的量,V代表溶液的体积。溶液浓度可分为质量浓度(如质量百分浓度)、体积浓度(如摩尔浓度、当量浓度)和质量-体积...
  • c在爱情的含义
    答:c在爱情的含义 c在爱情的含义。在日常生活中,很多人都是非常在乎一些关于爱情的含义的,c这个字母在爱情也具有着一定的解析。那么下面就为大家分享c在爱情的含义的相关内容。c在爱情的含义1 “C型爱情观”指的是对现代爱情关一种新的定义。在爱情中,有进有退、牵手分手的循环,已不再是个稀奇...
  • c是什么车标
    答:行政级别的轿车C车,或称为 Execuive,也就是行政级别的轿车,排量一般是2.4到3.2升,这个级车的排气量可高可低。通常有 A、 B、 C、 D等级车,各国标准不同,我国更没有统一的标准,因为德国汽车首先与我国合资并占领了一定市场,因此德国汽车多采用德国分级法:根据德国汽车分级标准,A0、A00级...
  • c的公式是什么?
    答:m>n。排列组合c的公式:C(n,m)=A(n,m)/m!=n!/m!(n-m)!与C(n,m)=C(n,n-m)。(n为下标,m为上标)。例如C(4,2)=4!/(2!*2!)=4*3/(2*1)=6,C(5,2)=C(5,3)。排列组合c计算方法:C是从几个中选取出来,不排列,只组合。C(n,m)=n*(n-1)*...*(n-m+1)/m...
  • c是什么意思
    答:c++的具体含义如下:C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C++不仅拥有...