SQL数据库里两个‘一对多’的表  怎么绑到gridview里啊,有的数据要合并显示的
比如  表1
ID  姓名
1    张三
2    李四
3    王五表2
RID  科目   分数
1    数学   87
1    语文   78
2    数学   67
2    语文   97要显示成
1  张三  数学87&语文78
2  李四  数学67&语文97
这样怎么弄啊?? 表1对表2是一对多的关系  表2里的数据 相同RID的行是要合并显示的

解决方案 »

  1.   

    GridView的ItemTemplate里嵌套GridView
      

  2.   

    新建个DATAtable 将所要的数据写入DATATABLE里再绑定到GRIDVIEW
      

  3.   

    就你这个例子,用Repeater嵌套Repeater即可    <asp:Repeater id="Repeater1" Runat="server">
            <ItemTemplate>
                <%# Eval("id")%> <%# Eval("姓名")%>
                <asp:Repeater ID="Repeater2" Runat="server" DataSource='<%# BindSub(Convert.ToInt32(Eval("id"))) %>'>
                <ItemTemplate>
                     <%# Eval("科目")%>  <%# Eval("分数")%>
                </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:Repeater>private void BindMain()
    {
        SqlConnection cn = new SqlConnection(@"server=.;uid=sa;pwd=;database=Demo");
        SqlDataAdapter da = new SqlDataAdapter("select id,姓名 from 表1", cn);
        DataSet ds = new DataSet();
        cn.Open();
        da.Fill(ds);
        cn.Close();
        Repeater1.DataSource = ds.Tables[0].DefaultView;
        Repeater1.DataBind();
    }protected DataTable BindSub(int id)
    {
        SqlConnection cn = new SqlConnection(@"server=.;uid=sa;pwd=;database=Demo");
        SqlDataAdapter da = new SqlDataAdapter("select 科目, 分数 from 表2 where rid = @id", cn);
        da.SelectCommand.Parameters.AddWithValue("id", id);
        DataSet ds = new DataSet();
        cn.Open();
        da.Fill(ds);
        cn.Close();
        return ds.Tables[0];
    }protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindMain();
        }
    }
      

  4.   


    create table studentInfo
    (
    sId int,
    sName varchar(20)
    )
    insert into studentInfo([sId],[sName]) values(1,'张三')
    insert into studentInfo([sId],[sName]) values(2,'李四')
    insert into studentInfo([sId],[sName]) values(3,'王五')select *  from [studentInfo]--drop table studentInfocreate table scoreInfo
    (
    rId int,
    pName varchar(20),
    score int 

    insert into scoreInfo([rId],[pName],[score]) values(1,'数学',87)
    insert into scoreInfo([rId],[pName],[score]) values(1,'语文',78)
    insert into scoreInfo([rId],[pName],[score]) values(2,'数学',67)
    insert into scoreInfo([rId],[pName],[score]) values(2,'语文',97)select * from scoreInfo
    --drop table scoreInfo
    select [sId],[sName],(
    select 
       '数学'+ltrim(str(isnull(sum(case [pName] when '数学' then [score] end),0)))
    +'&语文'+ltrim(str(isnull(sum(case [pName] when '语文' then [score] end),0)))
       from [scoreInfo] sc where st.[sId]=sc.[rId]    )
    from [studentInfo] st1 张三
    2 李四
    3 王五1 数学 87
    1 语文 78
    2 数学 67
    2 语文 97
    1 张三 数学87&语文78
    2 李四 数学67&语文97
    3 王五 数学0&语文0
      

  5.   

    呵呵,net可不能和sql比,太难了
      

  6.   

    无语啊,不知道你们星星都怎么学的net,4个月才不到2000分,累死我了
      

  7.   

    create table studentInfo(sId int,sName varchar(20))
    insert into studentInfo([sId],[sName]) values(1,'张三')
    insert into studentInfo([sId],[sName]) values(2,'李四')
    insert into studentInfo([sId],[sName]) values(3,'王五')create table scoreInfo(rId int,pName varchar(20),score int) 
    insert into scoreInfo([rId],[pName],[score]) values(1,'数学',87)
    insert into scoreInfo([rId],[pName],[score]) values(1,'语文',78)
    insert into scoreInfo([rId],[pName],[score]) values(2,'数学',67)
    insert into scoreInfo([rId],[pName],[score]) values(2,'语文',97)select sid,sName,
    max(case when pname='数学' then '数学'+ltrim(score) else '数学'+ltrim(0) end)+'&'+
    max(case when pname='语文' then '语文'+ltrim(score) else '语文'+ltrim(0) end) as col
    from (select * from studentInfo a left join scoreInfo b on a.sid=b.rid)t
    group by sid,sName2 李四 数学67&语文97
    3 王五 数学0&语文0
    1 张三 数学87&语文78
      

  8.   

    别着急` 我看好你呦~
     
    ps:貌似.net版提问的没有sql版的大方,一看排行榜靠前的就属SQL版的多。钻石也多~
     
      

  9.   

    你表二肯定有跟表一关键的字段把两个表连接一下不就得了
    string sqlText ="
    select 姓名,科目,成绩
    from tab1,tab2
    where tab1.编号 = tab2.编号";
      

  10.   

    select sid,sName,
    max(case when pname='数学' then '数学'+ltrim(score) else '数学'+ltrim(0) end)+'&'+
    max(case when pname='语文' then '语文'+ltrim(score) else '语文'+ltrim(0) end) as col
    from (select * from studentInfo a join scoreInfo b on a.sid=b.rid)t
    group by sid,sName1 张三 数学87&语文78
    2 李四 数学67&语文97
      

  11.   


    DECLARE @str VARCHAR(1000)
    SET @str='select st.[sId],st.[sName],sc.[newScore] from [studentInfo] st,(select a.[rid],('
    SELECT @str=@str+''''+pName+'''+ltrim(str(max(CASE WHEN a.[pName]='''+pName+''' THEN a.[score] ELSE 0 END)))+ ''&''+'
    FROM (Select Distinct [pName] From [scoreInfo]) A
    set @str=substring(@str,1,len(@str)-6)
    SET @str=@str+')as [newScore] from [scoreInfo] a group by a.[rId]) sc where st.[sId]=sc.[rId] '
    EXEC(@str) 
    把这个放在存储过程里
      

  12.   

    呵呵,非写的真不错,没细想,sorry
    想想加函数不行,不支持动态语句
      

  13.   

    DECLARE @str VARCHAR(1000)
    select @str=isnull(@str+'+''&''+','')+'max(case when pname='''+pname+''' then pname+ltrim(score) end)'
    from (Select Distinct [pName] From [scoreInfo]) A
    exec('select sid,sName,'+@str+' as col from (select * from studentInfo a join scoreInfo b on a.sid=b.rid)t group by sid,sName')1 张三 数学87&语文78
    2 李四 数学67&语文97嘿嘿阿非,不愿写不太好写的了,要不写了老久还不给你分,会比较郁闷的