回 帖 发 新 帖 刷新版面

主题:关于datagrid和ado.net的菜鸟问题!

有两个表:
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个回复)

沙发

你想显示的到底是什么名称啊?
如果只是想要把两个表中的数据连接到同一个DataGrid控件中的话,
就直接执行相关的查询语句就是了啊?
用left outer join on就可以做到的啊,
要是你想要按自己的想法显示列的名称的话就直接在DataGrid中指定HeaderText
就可以了啊。

板凳

你说的名称是什么??是列名吗?

3 楼

是我没有说明白,其实用SQL很好写的连接,两个表中的数据,但是加入dataset时不是只能加入到一个datatable吗?
useradpter.Fill(thisdataset,"cwgl_user");
wdadapter.Fill(thisdataset,"cwgl_wdxx");
其中加入的cwgl_user,cwgl_wdxx都是真的表名,可是如何将这两个表连接一下放到dataset中的datatable中呢????????

4 楼

你说的我了解哈,
以前我也是遇到了类似的问题,
在dataset 中我只加了原先其中的一个表格,但是在实现的时候还是实现了的啊,
所以我劝你也首先按照这种方法先试一下,两个表轮流着来嘛。
祝你成功。

5 楼

smart哥说的意思没太明白,求教!

6 楼

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 楼

楼上说的SQL语句是没有问题的,这样构造一个数据适配器可以,但是要放在dataset中不只能像这样:
wdadapter.Fill(thisdataset,"cwgl_wdxx");
吗?这样只能把一个表导入到dataset中吗?
是不是datagrid的数据源必须是dataset呀?

8 楼

使用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 楼

感谢namename兄,其实我的问题很简单,就是如何让datagrid显示比较灵活的数据库中的数据,比如说显示两表互连的数据(不是直接查询视图里的东西),显示完数据有合计之类的东西。
这个问题是你可以把两个表都填入到dataset的datatable中,也可以建立关系,可是在datagrid中又如何显示两个表中的经关联的字段呀?

我来回复

您尚未登录,请登录后再回复。点此登录或注册