当前位置:编程学习 > C#/ASP.NET >>

DataList绑定DataSet问题 ~~~~~100分~~~高手到

比如:我到dataset中有2张表
dataset.tables[0] 存储姓名
dataset.tables[1] 存储年纪

this.DataList.DataSource =dataset;
this.DataList.DataBind(); 

问前台有
姓名:<%#Eval('姓名')>
年纪:<%#Eval('年纪')>
这样写前台会报错
 请问如何前台绑定呢?????? --------------------编程问答-------------------- 姓名: <%#Eval('姓名')> 
年纪: <%#Eval('年纪')> 
应该只有后面那个报错吧,默认用的是table[0],不能同时两个表 --------------------编程问答-------------------- 你的DS中有两张表,DataList不能同事绑定两个表,要么你可以把两个表做成个视图再绑定到DataList上,要么,为DataList指定绑定的是TB1还是TB2。 --------------------编程问答--------------------
引用 1 楼 huwei2003 的回复:
姓名: <%#Eval('姓名')>
年纪: <%#Eval('年纪')>
应该只有后面那个报错吧,默认用的是table[0],不能同时两个表


我意思是说如何同时有绑定table[0]和table[1] --------------------编程问答-------------------- 不能同时绑定两个表, --------------------编程问答-------------------- 把两个Table合并成一个Table在绑定吧 --------------------编程问答-------------------- 姓名和年纪为什么要分开放在2个DataTable里? --------------------编程问答--------------------
引用 6 楼 dd__dd 的回复:
姓名和年纪为什么要分开放在2个DataTable里?

这只是个例子
 我是用别人到接口  返回的是xml 转换成dataset中就有好个几个表 --------------------编程问答-------------------- 那你就放两个DateList分别绑定table[0]和table[1] --------------------编程问答-------------------- 如果是一对一的关系,最好能合并,否则可用父子表来完成。
--------------------编程问答--------------------
引用 9 楼 cpp2017 的回复:
如果是一对一的关系,最好能合并,否则可用父子表来完成。


能详细说说父子表吗?? --------------------编程问答-------------------- C#提供的merge函数只针对同类型的数据表;楼主这种情况需要自己定义一个函数。
我做了一个专门针对楼主这种情况的函数MergeDataTable()

楼主可以这样调用:
Dt1 = MergeDataTable(Dt1, Dt2, "ID");

下面是函数定义:

/************************************************
** 函数名  :      MergeDataTable 
** 函数功能:      合并DataTable
** 入力参数:    
**  dt1       要合并的DataTable1
**  dt2       要合并的DataTable2
**  keyColName     dt1与dt2联系的关键列名
** 出力参数:      none
** 返回值  :      
** dtReturn      合并后的DataTable
** 作成者  :      悉雨辰寂
************************************************/
private DataTable MergeDataTable(DataTable dt1, DataTable dt2, String KeyColName)
{
 //定义临时变量
 DataTable dtReturn = new DataTable();
 int i=0;
 int j=0;
 int k=0;
 int colKey1=0;
 int colKey2=0;

 //设定表dtReturn的名字
 dtReturn.TableName = dt1.TableName;
 //设定表dtReturn的列名
 for(i=0; i<dt1.Columns.Count; i++){
  if( dt1.Columns[i].ColumnName == KeyColName ){
   colKey=i;
  }
  dtReturn.Columns.Add( dt1.Columns[i].ColumnName );
 }
 for(j=0; j<dt2.Columns.Count; j++){
  if( dt1.Columns[j].ColumnName == KeyColName ){
   colKey2=j;
   continue;
  }
  dtReturn.Columns.Add( dt2.Columns[j].ColumnName );
 }
 //建立表的空间
 for(i=0; i<dt1.Rows.Count; i++){
  DataRow dr;
  dr = dtReturn.NewRow();
  dtReturn.Rows.Add(dr);
 }
 //将表dt1,dt2的数据写入dtReturn
 for(i=0; i<dt1.Rows.Count; i++){
  int m=-1;
  //表dt1的第i行数据拷贝到dtReturn中去
  for(j=0; j<dt1.Columns.Count; j++){
   dtReturn.Rows[i][j] = dt1.Rows[i][j].ToString();
  }
  //查找的dt2中KeyColName的数据,与dt1相同的行(即楼主两个表中ID相同的行)
  for(k=0; k<dt2.Rows.Count; k++){
   if( dt1.Rows[i][colKey1].ToString() == dt1.Rows[k][colKey2].ToString() )}
    m=k;
   }
  }
  //表dt2的第m行数据拷贝到dtReturn中去,且不要KeyColName(ID)列
  if( m!=-1 ){
   for(k=0; k<dt2.Columns.Count; k++){
    if( k==colKey2 ){
     continue;
    }
    dtReturn.Rows[i][j] = dt2.Rows[m][k].ToString();
    j++;
   }
  }
 }

 return dtReturn ;
}

函数配有注释,应该很容易看明白。 --------------------编程问答-------------------- 用试图就行了把两张表弄在一块
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,