主题:关于datagrid和ado.net的菜鸟问题!
wqpost
[专家分:260] 发布于 2005-12-14 15:31:00
有两个表:
cwgl_user:
USER_ID NOT NULL VARCHAR2(10) //用户号
USER_NAME NOT NULL VARCHAR2(20)
USER_PWD NOT NULL VARCHAR2(10)
USER_DW NOT NULL VARCHAR2(20) //部门编号
cwgl_wdxx:
CH_WDBH NOT NULL CHAR(8) //部门编号
CH_MC VARCHAR2(20) //部门名称
其中cwgl_user.USER_DW和cwgl_wdxx.CH_WDBH可以建立连接,我想在datagrid中显示两个表连接后的信息,如何建立dataset?
DataSet thisdataset=new DataSet();
OleDbDataAdapter useradpter=new OleDbDataAdapter("select user_id,user_name,user_dw from cwgl_user",conn);
OleDbDataAdapter wdadapter=new OleDbDataAdapter("select ch_wdbh,ch_mc from cwgl_wdxx",conn);
useradpter.Fill(thisdataset,"cwgl_user");
wdadapter.Fill(thisdataset,"cwgl_wdxx");
DataRelation userdwRel=thisdataset.Relations.Add("userdw",thisdataset.Tables["cwgl_wdxx"].Columns["ch_wdbh"],thisdataset.Tables["cwgl_user"].Columns["user_dw"]);
this.DataGrid1.DataSource=thisdataset;
this.DataGrid1.DataBind();
这样在thisdataset中加了两个表的数据,可是如何连datagrid能让它显示出名称呢?
回复列表 (共9个回复)
沙发
smart [专家分:150] 发布于 2005-12-16 16:38:00
你想显示的到底是什么名称啊?
如果只是想要把两个表中的数据连接到同一个DataGrid控件中的话,
就直接执行相关的查询语句就是了啊?
用left outer join on就可以做到的啊,
要是你想要按自己的想法显示列的名称的话就直接在DataGrid中指定HeaderText
就可以了啊。
板凳
cszwzzhh [专家分:30] 发布于 2005-12-16 17:32:00
你说的名称是什么??是列名吗?
3 楼
wqpost [专家分:260] 发布于 2005-12-17 14:49:00
是我没有说明白,其实用SQL很好写的连接,两个表中的数据,但是加入dataset时不是只能加入到一个datatable吗?
useradpter.Fill(thisdataset,"cwgl_user");
wdadapter.Fill(thisdataset,"cwgl_wdxx");
其中加入的cwgl_user,cwgl_wdxx都是真的表名,可是如何将这两个表连接一下放到dataset中的datatable中呢????????
4 楼
smart [专家分:150] 发布于 2005-12-18 15:04:00
你说的我了解哈,
以前我也是遇到了类似的问题,
在dataset 中我只加了原先其中的一个表格,但是在实现的时候还是实现了的啊,
所以我劝你也首先按照这种方法先试一下,两个表轮流着来嘛。
祝你成功。
5 楼
wqpost [专家分:260] 发布于 2005-12-19 10:16:00
smart哥说的意思没太明白,求教!
6 楼
shuiziliu [专家分:300] 发布于 2005-12-19 10:46:00
OleDbDataAdapter useradpter=new OleDbDataAdapter("select user_id,user_name,user_dw, ch_wdbh,ch_mc from cwgl_user,cwgl_wdxx where cwgl_user.USER_DW=cwgl_wdxx.CH_WDBH",conn);
这样不可以吗?不知你的那两个部门编号是否是指同一部门编号
7 楼
wqpost [专家分:260] 发布于 2005-12-19 13:28:00
楼上说的SQL语句是没有问题的,这样构造一个数据适配器可以,但是要放在dataset中不只能像这样:
wdadapter.Fill(thisdataset,"cwgl_wdxx");
吗?这样只能把一个表导入到dataset中吗?
是不是datagrid的数据源必须是dataset呀?
8 楼
namename [专家分:1100] 发布于 2005-12-19 13:37:00
使用DataGrid.SetDataBinding()方法可以吗?没太看明白你的意思.你看看下面这段代码满足要求吗?
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;
public class DataGridSample:Form
{
DataSet ds;
DataGrid myGrid;
static void Main()
{
Application.Run(new DataGridSample());
}
public DataGridSample(){
InitializeComponent();
}
void InitializeComponent(){
this.ClientSize = new System.Drawing.Size(550, 450);
myGrid = new DataGrid();
myGrid.Location = new Point (10,10);
myGrid.Size = new Size(500, 400);
myGrid.CaptionText = "Microsoft .NET DataGrid";
this.Text = "C# Grid Example";
this.Controls.Add(myGrid);
ConnectToData();
}
void ConnectToData(){
string cString = "Data Source=(local);initial Catalog=Northwind;uid=sa;";
SqlConnection myConnection = new SqlConnection(cString);
// 生成第一个SqlDataAdapter
SqlDataAdapter myAdapter = new SqlDataAdapter();
myAdapter.TableMappings.Add("Table", "Suppliers");
myConnection.Open();
SqlCommand myCommand = new SqlCommand("SELECT * FROM Suppliers",
myConnection);
myCommand.CommandType = CommandType.Text;
myAdapter.SelectCommand = myCommand;
Console.WriteLine("The connection is open");
ds = new DataSet("Customers");
myAdapter.Fill(ds);
// 生成第二个SqlDataAdapter
SqlDataAdapter adpProducts = new SqlDataAdapter();
adpProducts.TableMappings.Add("Table", "Products");
SqlCommand cmdProducts = new SqlCommand("SELECT * FROM Products",
myConnection);
adpProducts.SelectCommand = cmdProducts;
adpProducts.Fill(ds);
myConnection.Close();
Console.WriteLine("The connection is closed.");
System.Data.DataRelation dr;
System.Data.DataColumn dc1;
System.Data.DataColumn dc2;
// 获得两个表的父列和子列
dc1 = ds.Tables["Suppliers"].Columns["SupplierID"]; //取得第1个表中的一列
dc2 = ds.Tables["Products"].Columns["SupplierID"]; //取得第2个表中的一列
dr = new System.Data.DataRelation("suppliers2products", dc1, dc2);//两个表做连接
ds.Relations.Add(dr);
myGrid.SetDataBinding(ds, "Suppliers"); //绑定显示
}
}
9 楼
wqpost [专家分:260] 发布于 2005-12-19 15:04:00
感谢namename兄,其实我的问题很简单,就是如何让datagrid显示比较灵活的数据库中的数据,比如说显示两表互连的数据(不是直接查询视图里的东西),显示完数据有合计之类的东西。
这个问题是你可以把两个表都填入到dataset的datatable中,也可以建立关系,可是在datagrid中又如何显示两个表中的经关联的字段呀?
我来回复