请大家帮忙想想,我这个问题怎么解决。
.net中的数据显示方法 reapeater datalist datagrid方法都是比较规正的显示数据。
现在我要做的是一个不太规整的数据显示。
我给大家举个例子。
要显示的数据分3列
序号、名称、数据
其中序号,数据很好直接从数据库中直接读数据就可以了。
问题就是名字比较麻烦。它的数据也是在数据库中,但他是有分类的和没有分类的。
也就是说有的是直接一行。有的有分类的还要加上分类,分类在一起的要把分类放在一个
格中。大家可以想象得出来么。想想工资表格、复杂一点的报表之类的。
不能上传图片不太好描述。
请高手指点一下我,我下个星期就要交任务了。救命啊,我还没过试用期那!
有什么不明白的跟贴。
请高手、斑竹、前辈一定要帮助我啊,刚工作才1个月。希望大家多多指点一下。
.net中的数据显示方法 reapeater datalist datagrid方法都是比较规正的显示数据。
现在我要做的是一个不太规整的数据显示。
我给大家举个例子。
要显示的数据分3列
序号、名称、数据
其中序号,数据很好直接从数据库中直接读数据就可以了。
问题就是名字比较麻烦。它的数据也是在数据库中,但他是有分类的和没有分类的。
也就是说有的是直接一行。有的有分类的还要加上分类,分类在一起的要把分类放在一个
格中。大家可以想象得出来么。想想工资表格、复杂一点的报表之类的。
不能上传图片不太好描述。
请高手指点一下我,我下个星期就要交任务了。救命啊,我还没过试用期那!
有什么不明白的跟贴。
请高手、斑竹、前辈一定要帮助我啊,刚工作才1个月。希望大家多多指点一下。
你说的方法很好,但是你说的合并单元格怎么实现??
good luck
你说的方法应该可行,可是我是初学者,你能解释的请出一点,给个实例么?
这只是一个方面不会的,
我的列有6列,序号、名称、代码、符号、数据、单位
其中序号要自动编号(我实现了)
名称、代码、符号、单位从sql sever数据库中得到。(也可以做到)
数据这一列的值要到实时数据库中取得,这个我也不会,不知道怎么做。工程师之说了一句你写个接口。我才工作一个月让我做,实在是难为我啊。不过没有办法,现实中这样的是很平常,只有自己努力去做了,希望大家多多帮忙啊。
哪有163.com.cn的邮件服务器,给我退回来了。是163.com吧,我就按163.com发给你吧
你的方法能具体一点么?
for(int i=0;i<DTable1.Rows.Count;i++)
{
int CT=Convert.ToInt32(DTable1.Rows[i]["ct"]);
string WN=DTable1.Rows[i]["working_name"].ToString();
if(CT>1)
{//生成一个店有多个银行帐户的表格
TableRow r = new TableRow();
r.HorizontalAlign=HorizontalAlign.Center;
TableCell c = new TableCell();
c.Text =WN;
c.Width=120;
c.RowSpan=CT+2;
r.Cells.Add(c);
Table1.Rows.Add(r);
string sql="select account,rate,balance,dbalance,unaccount,bank_total from bank_balance where working_name='"+WN+"' and stat_date='"+dt.ToShortDateString()+"'";
SqlDataReader reader=mydata1.executeQuery(sql);
float BA,BA_T=0;float UN,UN_T=0; float TA,TA_T=0;float DZ,DZ_T=0;
while(reader.Read())//该店的所有帐户
{
TableCell c1=new TableCell();
c1.Text=reader["account"].ToString();
c1.Width=200;
r.Cells.Add(c1);//帐户
TableCell c2=new TableCell();
c2.Text=reader["rate"].ToString();
c2.Width=55;
r.Cells.Add(c2);//利率
TableCell c3=new TableCell();
BA=Convert.ToSingle(reader["balance"]);
c3.Text=BA.ToString();
r.Cells.Add(c3);//余额
TableCell c4=new TableCell();
UN=Convert.ToSingle(reader["unaccount"]);
c4.Text=UN.ToString();
c4.Width=110;
r.Cells.Add(c4);//未达帐额
TableCell c5=new TableCell();
TA=Convert.ToSingle(reader["bank_total"]);
c5.Text=TA.ToString();
r.Cells.Add(c5);//总余额
TableCell c6=new TableCell();
DZ=Convert.ToSingle(reader["DBalance"]);
c6.Text=DZ.ToString();
c6.Width=110;
r.Cells.Add(c6);//银行对帐单 BA_T=BA_T+BA;UN_T=UN_T+UN;TA_T=TA_T+TA;DZ_T=DZ_T+DZ;
r=new TableRow();
r.HorizontalAlign=HorizontalAlign.Center;
Table1.Rows.Add(r);
}
reader.Close();
//小计
r=new TableRow();
r.HorizontalAlign=HorizontalAlign.Center;
Table1.Rows.Add(r);
TableCell X1=new TableCell();
X1.Text="小计";
X1.ForeColor=Color.Red;
X1.Width=200;
r.Cells.Add(X1);//小计
TableCell X2=new TableCell();
X2.Text="";
r.Cells.Add(X2);//利率
TableCell X3=new TableCell();
X3.Text=BA_T.ToString();
r.Cells.Add(X3);//余额小计
TableCell X4=new TableCell();
X4.Text=UN_T.ToString();
X4.Width=110;
r.Cells.Add(X4);//未达帐额小计
TableCell X5=new TableCell();
X5.Text=TA_T.ToString();
r.Cells.Add(X5);//总余额小计
TableCell X6=new TableCell();
X6.Text=DZ_T.ToString();
r.Cells.Add(X6);//对帐单余额
Table1.Rows.Add(r);
}
else if(CT==1)
{
string sql="select account,rate,balance,dbalance,unaccount,bank_total from bank_balance where working_name='"+WN+"' and stat_date='"+dt.ToShortDateString()+"'";
SqlDataReader reader1=mydata1.executeQuery(sql);
if(reader1.Read())
{
TableRow r = new TableRow();
r.HorizontalAlign=HorizontalAlign.Center;
TableCell c = new TableCell();
c.Text =WN;
c.Width=120;
r.Cells.Add(c);
TableCell c1 = new TableCell();
c1.Text =reader1["account"].ToString();
c1.Width=200;
r.Cells.Add(c1);
TableCell c2 = new TableCell();
c2.Text =reader1["rate"].ToString();
c2.Width=55;
r.Cells.Add(c2);
TableCell c3 = new TableCell();
c3.Text =reader1["balance"].ToString();
r.Cells.Add(c3);
TableCell c4 = new TableCell();
c4.Text =reader1["unaccount"].ToString();
c4.Width=110;
r.Cells.Add(c4);
TableCell c5 = new TableCell();
c5.Text =reader1["bank_total"].ToString();
r.Cells.Add(c5); TableCell c6 = new TableCell();
c6.Text =reader1["dbalance"].ToString();
r.Cells.Add(c6);
Table1.Rows.Add(r);
}
reader1.Close();
}
}
你是想说明,姓名是分类的是不是,读出来的时候,要根椐类别不同而读出不同姓名,是不是这个意思?我建议你再加一个例,这个例,当做是判别名字这个类的依据: 例如:
序号 名称 数据 类别
1 张三 85 1
2 李四 96 2
3 赵五 45 3比如上面数据,你读的(名字)类数据,就可以根椐后面(类别)来作依据
比如类别一例中的1,你就可以把它当作一个类的标志,比如大类
2 ,就可以当作另一个类,比如小类,
当然3也是如此
你读取数姓名列数据时,加个where 根据类别来读
select 姓名 from tablename where 类别=1 (或是2,3) 以上见意不知能不能帮得上你的忙!!!尽供参考,大家如有更好的意见,快快拿出来分享!!!
private ASPNetDatagridDecorator m_add=new ASPNetDatagridDecorator();
TableCell cell=null;
m_add.DatagridToDecorate=ResultDataGrid;
ArrayList header=new ArrayList(); cell=new TableCell();
cell.Text="名称";
cell.RowSpan=2;
cell.HorizontalAlign=HorizontalAlign.Center;
header.Add(cell); cell=new TableCell();
cell.Text="型号";
cell.RowSpan=2;
cell.HorizontalAlign=HorizontalAlign.Center;
header.Add(cell); cell=new TableCell();
cell.Text="品牌";
cell.RowSpan=2;
cell.HorizontalAlign=HorizontalAlign.Center;
header.Add(cell); cell=new TableCell();
cell.Text="货币数量";
cell.RowSpan=2;
cell.HorizontalAlign=HorizontalAlign.Center;
header.Add(cell); cell=new TableCell();
cell.Text="价格说明";
cell.RowSpan=2;
cell.HorizontalAlign=HorizontalAlign.Center;
header.Add(cell); cell=new TableCell();
cell.Text="产地";
cell.RowSpan=2;
cell.HorizontalAlign=HorizontalAlign.Center;
header.Add(cell); cell=new TableCell();
cell.Text="适用行业";
cell.RowSpan=2;
cell.HorizontalAlign=HorizontalAlign.Center;
header.Add(cell);
主要代码如下:
ASPNetDatagridDecorator m_add=new ASPNetDatagridDecorator();
using System;
using System.Web.UI.WebControls;
using System.Collections;
using System.Web.UI;namespace CBP.CBPWeb.Models
{
/// <summary>
/// Summary description for ASPNetDatagridDecorator.
/// </summary>
public class ASPNetDatagridDecorator
{
public ASPNetDatagridDecorator()
{
//
// TODO: Add constructor logic here
//
}
public ASPNetDatagridDecorator(DataGrid DatagridToDecorate, ArrayList HeaderCells)
{
//
// TODO: Add constructor logic here
//
this.DatagridToDecorate = DatagridToDecorate;
AddMergeHeader(HeaderCells);
}
public void AddMergeHeader(ArrayList arrHeaderCells)
{
m_arrHeaderCells =arrHeaderCells;
}
private void NewRenderMethod(HtmlTextWriter writer, Control ctl)
{
int iCurrIndex = 0;
for(int i=0; i<m_arrHeaderCells.Count; i++)
{
TableCell item = (TableCell)m_arrHeaderCells[i];
if(item.ColumnSpan > 1)
{
iCurrIndex += item.ColumnSpan-1;
}
if(item.RowSpan > 1)
{
m_htblRowspanIndex.Add(iCurrIndex + i, iCurrIndex + i);
}
item.RenderControl(writer);
}
writer.WriteEndTag("TR");
//*** Add the style attributes that was defined in design time
// to our second row so they both will have the same appearance
m_dgDatagridToDecorate.HeaderStyle.AddAttributesToRender(writer);
//*** Insert the second row
writer.RenderBeginTag("TR");
//*** Render all the cells that was defined in design time, except the last one
// because we already rendered it above
for(int i=0; i< ctl.Controls.Count; i++)
{
if((null == m_htblRowspanIndex[i]))
{
ctl.Controls[i].RenderControl(writer);
}
}
//*** We don't need to write the </TR> close tag because the writer will do that for us
// and so we're done :)
}
/// <summary>
/// Gets or sets the datagrid to decorate
/// </summary>
public DataGrid DatagridToDecorate
{
get
{
return m_dgDatagridToDecorate;
}
set
{
if(null != m_dgDatagridToDecorate)
{
m_dgDatagridToDecorate.ItemCreated -= new DataGridItemEventHandler(DatagridToDecorate_ItemCreated);
}
m_dgDatagridToDecorate = value;
m_dgDatagridToDecorate.ItemCreated += new DataGridItemEventHandler(DatagridToDecorate_ItemCreated);
}
}
private void DatagridToDecorate_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//*** Examine if the item created is the header item
ListItemType lit = e.Item.ItemType;
if(ListItemType.Header == lit)
{
//*** Redirect the default header rendering method to our own method
e.Item.SetRenderMethodDelegate(new RenderMethod(NewRenderMethod));
}
} /// <summary>
/// Hold the reference to the datagrid to decorate
/// </summary>
private DataGrid m_dgDatagridToDecorate = null;
private ArrayList m_arrHeaderCells = null;
private Hashtable m_htblRowspanIndex = new Hashtable(); }
}
回复人: blackhero(黑侠客) ( ) 信誉:100