如上,假如我已经读好了一个数据集ds,想要通过查找在DataGridView里显示ds里的两个列A和B.
但A属于甲表,B属于乙表,它们不在同一个表里,我该怎么让DataGridView同时显示它们呢?我知道假如是从SQL数据库读取的话可以多表查询的方法,但我这个不是从SQL数据库读的,而是从XML文件读的ds.
请问大家能有什么办法吗?我能初步想到的是先分别通过遍历甲表和乙表查找到想要的记录,再创建一个全新的表用来添加A列和B列的内容,最后绑定到DataGridView.各位看看这样的方法行不行,具体分析的添加代码我还不太了解,谁能帮帮我解决一下吗?
非常感谢啊!!!
但A属于甲表,B属于乙表,它们不在同一个表里,我该怎么让DataGridView同时显示它们呢?我知道假如是从SQL数据库读取的话可以多表查询的方法,但我这个不是从SQL数据库读的,而是从XML文件读的ds.
请问大家能有什么办法吗?我能初步想到的是先分别通过遍历甲表和乙表查找到想要的记录,再创建一个全新的表用来添加A列和B列的内容,最后绑定到DataGridView.各位看看这样的方法行不行,具体分析的添加代码我还不太了解,谁能帮帮我解决一下吗?
非常感谢啊!!!
解决方案 »
- radioButton1.checked问题
- 错误 1 “System.Windows.Forms.Application”并不包含“EnableVisualStyles”的定义
- 这段代码看不懂。。
- 如何用DataSet生成指定结构的XML??
- 高分求VS2005中ReportViewer控件的用法
- 请问怎样把整个word文档转成一个图片
- C# 调用C++ dll 刷新picturebox 形成预览效果
- 如何关闭aspx页面的cache功能?缺省是有cache的吧?
- 视图问题,请高手指教!
- 请各位大侠,救救小弟吧,我用错了书,现在痛苦死了,请推荐,谢谢。
- c# 生成文件名的问题
- 如何实现自动入住
DataRelation relation = new DataRelation("",
ds.Tables[""].Columns[""], ds.Tables[""].Columns[""]);
ds.Relations.Add(relation);
或使用实体类关联
然后在绑定到gridview就是了啊
select A.a,A.b,A.c,B.a,B.b,B.c from table1 A,table2 B;
绑定就不说了啥
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;