如上,假如我已经读好了一个数据集ds,想要通过查找在DataGridView里显示ds里的两个列A和B.
但A属于甲表,B属于乙表,它们不在同一个表里,我该怎么让DataGridView同时显示它们呢?我知道假如是从SQL数据库读取的话可以多表查询的方法,但我这个不是从SQL数据库读的,而是从XML文件读的ds.
请问大家能有什么办法吗?我能初步想到的是先分别通过遍历甲表和乙表查找到想要的记录,再创建一个全新的表用来添加A列和B列的内容,最后绑定到DataGridView.各位看看这样的方法行不行,具体分析的添加代码我还不太了解,谁能帮帮我解决一下吗?
非常感谢啊!!!

解决方案 »

  1.   

    DataSet ds= new DataSet(); 
    DataRelation relation = new DataRelation("", 
    ds.Tables[""].Columns[""], ds.Tables[""].Columns[""]); 
    ds.Relations.Add(relation); 
    或使用实体类关联
      

  2.   

    自定义一个datatable,再进行绑定
      

  3.   

    New DataTable,然后绑定 DataGridView
      

  4.   

    你可以联合查询
    然后在绑定到gridview就是了啊
    select A.a,A.b,A.c,B.a,B.b,B.c from table1 A,table2 B;
    绑定就不说了啥
      

  5.   

    唉,还是用回自己的方法解决了,虽然笨拙了点.            DataSet ds = ClassDs.getDataset();
              
                DataTable lendDt = ds.Tables["借还记录表"];
                DataTable readerDt = ds.Tables["读者信息表"];
                DataTable booksDt=ds.Tables ["图书详细信息表"];            //创建临时表,并给它添加相应列
                  DataTable TempDt1=new DataTable ("新借还记录表");
                DataColumn  ColRecord= TempDt1.Columns.Add("借书记录号", typeof(int));
                DataColumn ColBookName = TempDt1.Columns.Add("书名", typeof(string));
                DataColumn ColBookMark = TempDt1.Columns.Add("索书号", typeof(string));
                DataColumn ColReader = TempDt1.Columns.Add("借书人姓名", typeof(string));
                DataColumn ColLendNumber = TempDt1.Columns.Add("借书证号", typeof(string));
                DataColumn ColOutDate = TempDt1.Columns.Add("借出日期", typeof(DateTime));
                DataColumn ColBackDate = TempDt1.Columns.Add("应还日期", typeof(DateTime));             //从[借还记录表]提取信息。
                 string expression1="LendNumber='"+txtLendNumber .Text .Trim ()+"'";//筛选表达式。
                 string SortOrder1="BookMark DESC";//排序表达式。
                 DataRow[] FromLendDtRows = lendDt.Select(expression1, SortOrder1);//存入这个列的数组里。             if (FromLendDtRows.Length > 1)
                 {//判断有没有记录.
                    //从[读者信息表]提取[姓名]字段。//这里其实只会找到一条记录,也可以用foreach遍历readerDt表得到.
                    string expression2 = "LendNumber='" + txtLendNumber.Text.Trim() + "'";//筛选表达式。
                    string SortOrder2 = "LendNumber DESC";//排序表达式。
                    DataRow[] FromReaderDtRows = readerDt.Select(expression2, SortOrder2);//存入这个列的数组里。                //遍历借还记录,读取[书名]字段//数目是跟借书记录FromReaderDtRows的数目相一致的.
                    //string[] bookName;
                    for (int i = 0; i < FromLendDtRows.Length; i++)
                    {
                       foreach (DataRow row in booksDt.Rows)
                       {
                          if (row["BookMark"].ToString().Trim() == FromLendDtRows[i]["BookMark"].ToString().Trim())
                          {
                             //注意bookName[i]里的这个i,每条借书记录FromReaderDtRows里
                                //都会有一个索书号可以是找到图书名的.
                             //所以这里做的是很绝对的事情,这些循环和遍历只要是存在借书记录的情况下,是一定会执行的.
                             bookName[i] = row["BookName"].ToString().Trim();
                             break;//跳出遍历表的循环.
                          }
                       }
                    }                //创建一个新表的的新行,用来整合来自不表的两个行
                    for (int i = 0; i < FromLendDtRows.Length; i++)
                    {
                       DataRow newRow = TempDt1.NewRow();
                       newRow["借书记录号"] = FromLendDtRows[i]["LendRecord"];
                       newRow["书名"] = bookName[i];
                       newRow["索书号"] = FromLendDtRows[i]["BookMark"];
                       newRow["借书人姓名"] = FromReaderDtRows[0]["ReaderName"];
                       newRow["借书证号"] = FromLendDtRows[i]["LendNumber"];
                       newRow["借出日期"] = FromLendDtRows[i]["LendDate"];
                       newRow["应还日期"] = FromLendDtRows[i]["BackDate"];
                       TempDt1.Rows.Add(newRow);
                    }                dgvLendRecord.DataSource = TempDt1;