DataGrid显示如下:
   甲 乙 丙 丁
A
B
C
D
E
行列标题是从TableA和TableB表中获取到的,如何进行绑定?谢谢各位帮忙~~

解决方案 »

  1.   

    那么你需要写代码来生成这张表,不能直接就绑定原始表
    DataTable a = new DataTable();//原始表A
    DataTable b = new DataTable();//原始表BDataTable c = new DataTable();//创建一张新表
    for(int i=0;i<a.Rows.Count;i++)
    {
       c.Columns.Add(a.Rows[i][0].ToString());//添加   甲 乙 丙 丁 4列}for(int j=0;j<b.Rows.Count;j++)
    {
       DataRow dr = c.NewRow();
       dr[0]= b.Rows[j][0].ToString();
       c.Rows.Add(dr);//添加 行
    }最后绑定c
      

  2.   

    可以将两表在sql中合并成视图,绑定视图就可以了
      

  3.   

    使用交叉表,如何使用可以在SQLSERVER中搜索[交叉表]里面有例子.
      

  4.   

    但是这种绑定显示的格式不是我想要的啊,我是要显示:
       甲 乙 丙 丁
    A  1  2
    B
    而不是:
    甲 乙 丙 丁
    A
    B
    ???
      

  5.   

    你将两个表综合为一个DataTable(比如使用sql语句,存储过程临时表,先选择出两个表的数据,然后循环构建新的DataTable等等方法),然后再绑定
      

  6.   

    基础格式可以显示出来,不过问题还是之前我所提到的,就是行标题如何能和列标题一样显示在标题栏中,而不是显示在某一cell中?
      

  7.   

    没人搭理了:(
    问题虽然简单,还希望各位帮帮忙,不吝赐教~~
    目的就是希望显示的行标题也能和列标题一样显示在DataGrid的标题栏中~~
      

  8.   

    你是想在行标题里显示记录吧?
    private void dataGrid1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    dataGrid1.RowHeaderWidth =dataGrid1.PreferredColumnWidth;
    Point point =new Point(dataGrid1.GetCellBounds(0,0).X,dataGrid1.GetCellBounds(0,0).Y);
    point.X-=dataGrid1.RowHeaderWidth;
    DataTable table =(DataTable)dataGrid1.DataSource;
    for(int i=0 ;i<table.Rows.Count;i++)
    {
    e.Graphics.DrawString(table.Rows[i][0].ToString(),dataGrid1.Font,new SolidBrush(Color.Black),point.X,point.Y+i*(dataGrid1.PreferredRowHeight+1));
    }
    }
      

  9.   

    请问Cnapollo(旁痞):
    我在datagrid刚刚加载时怎么写啊?假设列标题从TableA中取得,行标题从TableB中取得.到何时我才能把winform里那几个控件的基本功能掌握啊,唉,还是学习学习再学习吧!唉,还得感叹自己不是编程的料啊,无语中,郁闷中...但还得坚持中...
      

  10.   

    刚看到,你要顺便发个消息给我就会马上回
    刚发给你的第二种方法不是重写DataGrid.
    只是用DataGridTableStyle来修改DataGrid的格式来达到隐藏第一行的目的,你用第一种方法在编辑器里设置样式也是一样的
      

  11.   

    private void dataGrid1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    dataGrid1.RowHeaderWidth =dataGrid1.PreferredColumnWidth;
    Point point =new Point(dataGrid1.GetCellBounds(0,0).X,dataGrid1.GetCellBounds(0,0).Y);
    point.X-=dataGrid1.RowHeaderWidth;
    DataTable table =(DataTable)dataGrid1.DataSource;
    for(int i=0 ;i<table.Rows.Count;i++)
    {
    e.Graphics.DrawString(table.Rows[i][0].ToString(),dataGrid1.Font,new SolidBrush(Color.Black),point.X,point.Y+i*(dataGrid1.PreferredRowHeight+1));
    }
    }
    这个事件里哪一句说明"用DataGridTableStyle来修改DataGrid的格式来达到隐藏第一行的目的"?还是不懂:(
      

  12.   

    这个事件里没有隐藏第一行的代码,是我发个你的消息里面有.
    1.自动设置:TableStyles->DataGridTableStyle->GridColumnStyles设置
    2.手动设置:自己建DataGridTableStyle
    DataGridTableStyle TSB = new DataGridTableStyle();
    TSB.MappingName = "B";//指定表名:即所绑定的DataTable表名//设置F_Name 字段样式
    DataGridColumnStyle TCFirstName = new DataGridTextBoxColumn();
    TCFirstName.MappingName = "F_Name";
    TCFirstName.HeaderText = "First Name";
    TCFirstName.Width = 0;
    TSB.GridColumnStyles.Add(TCFirstName);
    //设置其它字段样式.ex:"F_ID"
    DataGridColumnStyle TCID = new DataGridTextBoxColumn();
    TCID.MappingName = "F_ID";
    TCID.HeaderText = "ID";
    TCID.Width = 30;
    TSB.GridColumnStyles.Add(TCID);dataGrid1.TableStyles.Add(TSB);
      

  13.   

    你还是用属性生成器设置好一点:
    DataGrid1->属性->TableStyles...->添加(dataGridTableStyle1)->MappingName:表名   GridColumnStyles...->添加(dataGridTextBoxColumn1)->Width:0(要隐藏的那一列)MappingName(字段名)    
    其它列指定MappingNmae=字段名.Width就不用改好啦
      

  14.   

    甲 乙 丙 丁
    A  1  2
    B
    你在创建新表时要加一个新字段(名字任取)
    DataTable c = new DataTable();//创建一张新表
    for(int i=0;i<a.Rows.Count;i++)
    {
       c.Columns.Add(a.Rows[i][0].ToString());//添加   甲 乙 丙 丁 4列***此处要加一个对应第一列新字段}
      

  15.   

    DataTable d;//增加代码private void MyDataGrid_Load(object sender, System.EventArgs e)
    {
    string strConn= "provider=SQLOLEDB;server=localhost;userid=sa ;password=;database=test";
    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open(); 
    string aString = "SELECT name FROM DG_MainType order by id"; OleDbDataAdapter odaA = new OleDbDataAdapter(aString,conn);
    DataSet dsA = new DataSet();
    odaA.Fill(dsA);
    DataTable a = dsA.Tables[0];// string bString = "SELECT name FROM DG_SubType order by id";
    OleDbDataAdapter odaB = new OleDbDataAdapter(bString,conn);
    DataSet dsB = new DataSet();
    odaB.Fill(dsB);
    DataTable b = dsB.Tables[0];// DataTable c = new DataTable();//
    for(int i=0;i<a.Rows.Count;i++)
    {
    c.Columns.Add(a.Rows[i][0].ToString());//列标题
    }
    for(int j=0;j<b.Rows.Count;j++)
    {
    DataRow dr = c.NewRow();
    dr[0]= b.Rows[j][0].ToString();
    c.Rows.Add(dr);//
    }
    d =c.Clone(); //增加代码
    c.Columns.Remove("FirstName");//增加代码 dataGrid1.SetDataBinding(c,"");
    } private void dataGrid1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    dataGrid1.RowHeaderWidth =dataGrid1.PreferredColumnWidth;
    Point point =new Point(dataGrid1.GetCellBounds(0,0).X,dataGrid1.GetCellBounds(0,0).Y);
    point.X-=dataGrid1.RowHeaderWidth;
    DataTable table =d; //原句修改
    for(int i=0 ;i<table.Rows.Count;i++)
    {
    e.Graphics.DrawString(table.Rows[i][0].ToString(),dataGrid1.Font,new SolidBrush(Color.Black),point.X,point.Y+i*(dataGrid1.PreferredRowHeight+1));
    }
    }
    这里你不需要用TableStyles去隐藏列了.
      

  16.   

    c.Columns.Add("FirstName");但是行标题并没有显示啊?头又大了一圈