那么你需要写代码来生成这张表,不能直接就绑定原始表 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
可以将两表在sql中合并成视图,绑定视图就可以了
使用交叉表,如何使用可以在SQLSERVER中搜索[交叉表]里面有例子.
但是这种绑定显示的格式不是我想要的啊,我是要显示: 甲 乙 丙 丁 A 1 2 B 而不是: 甲 乙 丙 丁 A B ???
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
甲 乙 丙 丁
A 1 2
B
而不是:
甲 乙 丙 丁
A
B
???
问题虽然简单,还希望各位帮帮忙,不吝赐教~~
目的就是希望显示的行标题也能和列标题一样显示在DataGrid的标题栏中~~
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));
}
}
我在datagrid刚刚加载时怎么写啊?假设列标题从TableA中取得,行标题从TableB中取得.到何时我才能把winform里那几个控件的基本功能掌握啊,唉,还是学习学习再学习吧!唉,还得感叹自己不是编程的料啊,无语中,郁闷中...但还得坚持中...
刚发给你的第二种方法不是重写DataGrid.
只是用DataGridTableStyle来修改DataGrid的格式来达到隐藏第一行的目的,你用第一种方法在编辑器里设置样式也是一样的
{
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的格式来达到隐藏第一行的目的"?还是不懂:(
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);
DataGrid1->属性->TableStyles...->添加(dataGridTableStyle1)->MappingName:表名 GridColumnStyles...->添加(dataGridTextBoxColumn1)->Width:0(要隐藏的那一列)MappingName(字段名)
其它列指定MappingNmae=字段名.Width就不用改好啦
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列***此处要加一个对应第一列新字段}
{
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去隐藏列了.