====怎样用table web 服务器控件画一张特殊的表格====

camlovecam 2003-08-21 04:29:09
DataSet ds=new DataSet();
mysqldata.Fill(ds,"myuser");


DataView aDataView = ds.Tables["myuser"].DefaultView;
foreach( DataRowView aRow in aDataView)
{
TableRow aTableRow = new TableRow();
TableCell aCell1 = new TableCell();
aCell1.Text = aRow["password"].ToString();
aTableRow.Cells.Add(aCell1);
TableCell aCell2 = new TableCell();
aCell2.Text = aRow["userid"].ToString();
aTableRow.Cells.Add(aCell2);
Table1.Rows.Add(aTableRow);
}

上面的显示是一张网格形式的表格,怎样才能做到下面的样子?

--------------------------------------_-----+
+ + 城市名 + 人口 + +
+ +---------+----------+-----------+
+ 地区名 + + + +
+ +---------+----------+-----------+
+ + + + +
+----------+---------+----------+-----------+

谢谢。










...全文
26 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
camlovecam 2003-08-22
  • 打赏
  • 举报
回复
to to eva(eva):可以了,谢谢!
private void Button4_Click(object sender, System.EventArgs e)
{
SqlConnection myconn=new SqlConnection("server=(local);database=zzrkpcs;uid=sa;pwd=");
SqlDataAdapter mysqldata=new SqlDataAdapter("select substring(zzzh,1,9) as zzzh ,xb as xb,count(zzzh) as sl ,'jb' from jb_tab where (zzzh like '330282%' )group by substring(zzzh,1,9) ,xb order by substring(zzzh,1,9) ,xb",myconn);

DataSet ds=new DataSet();
mysqldata.Fill(ds,"jb_tab");


DataView aDataView = ds.Tables["jb_tab"].DefaultView;
jb_tab.GridLines = GridLines.Both;
jb_tab.BorderStyle = BorderStyle.Solid;
jb_tab.BorderWidth = 1;
jb_tab.CellPadding = 3;
jb_tab.CellSpacing = 0;
jb_tab.Width = 300;
jb_tab.BorderColor = Color.FromArgb(20,120,235);
foreach( DataRowView aRow in aDataView)
{
TableRow aTableRow = new TableRow();
TableCell Cell_zzzh = new TableCell();
TableCell Cell_xb = new TableCell();
TableCell Cell_sl=new TableCell();
Cell_zzzh.Text = aRow["zzzh"].ToString();
Cell_xb.Text = aRow["xb"].ToString();
Cell_sl.Text = aRow["sl"].ToString();
aTableRow.Cells.Add(Cell_zzzh);
aTableRow.Cells.Add(Cell_xb);
aTableRow.Cells.Add(Cell_sl);
jb_tab.Rows.Add(aTableRow);
}
/***开始合并单元格***/
int iRows; //DataTable的行数
int iColumns; //DataTable的列数
iRows=jb_tab.Rows.Count;
iColumns=1;
string strTmp=null; //临时变量保存单元格值
int iRowSpan=1; //拉伸到几个行高
int iRowNo=0; //正在拉伸的行号
int iColNo=0; //正在拉伸的列号

for (int i=0;i<iColumns;i++) //历遍绑定到表的所有列
{
strTmp="";
for (int j=0;j<iRows;j++) //历遍绑定到表的所有行(单元格)
{
if (strTmp==jb_tab.Rows[j].Cells[i].Text.ToString().Trim()) //将临时变量与指定单元格的制进行比较
{
iRowSpan=iRowSpan+1;
jb_tab.Rows[j].Cells[i].Visible=false; //隐藏当前单元格
jb_tab.Rows[iRowNo].Cells[iColNo].RowSpan=iRowSpan; //上面的单元格在纵向改变为n个单元格的高度
}
else
{
iRowNo=j;
iColNo=i;
iRowSpan=1;
strTmp=jb_tab.Rows[j].Cells[i].Text.ToString().Trim(); //将当前单元格的值赋给临时变量
}
}
}
/***合并完毕***/


}
}
camlovecam 2003-08-21
  • 打赏
  • 举报
回复
to eva(eva)
谢谢你,我在看,不过水平有限有点看不懂,^_^!
eva 2003-08-21
  • 打赏
  • 举报
回复
以上代码产生效果如下

|--------|-------|-------
| | b1 | c1
| | |-------
| a | | c2
| |-------|-------
| | b2 | c3
|--------|-------|-------
eva 2003-08-21
  • 打赏
  • 举报
回复
一下是我正在做的项目中的一个实现合并单元格的程序,仅供参考

#region ComplexTable:生成可合并单元格的表格,传入参数为DataSet和是否可编辑bEdit
/// <summary>
/// 生成可合并单元格的表格
/// </summary>
/// <param name="dtsSource">要绑定的DataSource</param>
/// <param name="bEdit">表格是否可编辑</param>
/// <returns>出错信息的串</returns>
public string ComplexTable(DataSet dtsSource,bool bEdit)
{
panShow.Controls.Clear();


Table tabTarget = new Table();
tabTarget.GridLines = GridLines.Both;
tabTarget.BorderStyle = BorderStyle.Solid;
tabTarget.BorderWidth = 1;
tabTarget.CellPadding = 3;
tabTarget.CellSpacing = 0;
tabTarget.Width = 750;
tabTarget.BorderColor = Color.FromArgb(20,120,235);

tabTarget.Rows.Add(new TableRow());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());
tabTarget.Rows[0].Cells.Add(new TableCell());

tabTarget.Rows[0].Cells[0].Text="绩效领域";
tabTarget.Rows[0].Cells[1].Text="KSF";
tabTarget.Rows[0].Cells[2].Text="KPI";
tabTarget.Rows[0].Cells[3].Text="权重";
tabTarget.Rows[0].Cells[4].Text="指标";
tabTarget.Rows[0].Cells[5].Text="卓越指标";
tabTarget.Rows[0].Cells[6].Text="考核标准";
tabTarget.Rows[0].Cells[7].Text="努力KSF";
tabTarget.Rows[0].Cells[8].Text="完成期限";
tabTarget.Rows[0].Cells[9].Text="配合部门";
tabTarget.Rows[0].Cells[10].Text="评估来源";

tabTarget.Rows[0].Cells[11].Width = Unit.Pixel(100);
tabTarget.Rows[0].Cells[0].Width = Unit.Pixel(100);
tabTarget.Rows[0].Cells[1].Width = Unit.Pixel(150);
tabTarget.Rows[0].Cells[2].Width = Unit.Pixel(200);
tabTarget.Rows[0].Cells[3].Width = Unit.Pixel(50);
tabTarget.Rows[0].HorizontalAlign = HorizontalAlign.Center;
tabTarget.Rows[0].BackColor = Color.FromArgb(170,204,243);

tabTarget.Rows[0].Height = Unit.Pixel(22);

try
{
/***将DataSet绑定到表格中***/
DataTable dtt = new DataTable();
dtt = dtsSource.Tables[0]; //默认取DataSet中的第一个DataTable

int iRows; //DataTable的行数
int iColumns; //DataTable的列数

iRows=dtt.Rows.Count; //得到DataTable的行数
if (iRows == 0)
{
this.panShow.Controls.Add(tabTarget);
panShow.Visible = true;
return "";
}
// iColumns=dtt.Columns.Count-1; //得到DataTable的列数,不包含流水号列
iColumns=3;

for (int i=0;i<iRows;i++)
{
DataRow dr = dtt.Rows[i];
TableRow r = new TableRow();
for (int j=0;j<iColumns;j++)
{
DataColumn dc = dtt.Columns[j];
TableCell c = new TableCell();
c.ID = "Cell_" + i.ToString() + "_" + j.ToString();
c.Text = dr[dc].ToString();
r.HorizontalAlign=HorizontalAlign.Center;
r.Cells.Add(c);
}

tabTarget.Rows.Add(r);
}

/***开始合并单元格***/
string strTmp=null; //临时变量保存单元格值
int iRowSpan=1; //拉伸到几个行高
int iRowNo=0; //正在拉伸的行号
int iColNo=0; //正在拉伸的列号

for (int i=0;i<iColumns;i++) //历遍绑定到表的所有列
{
strTmp="";
for (int j=0;j<iRows+1;j++) //历遍绑定到表的所有行(单元格)
{
if (strTmp==tabTarget.Rows[j].Cells[i].Text.ToString().Trim()) //将临时变量与指定单元格的制进行比较
{
iRowSpan=iRowSpan+1;
tabTarget.Rows[j].Cells[i].Visible=false; //隐藏当前单元格
tabTarget.Rows[iRowNo].Cells[iColNo].RowSpan=iRowSpan; //上面的单元格在纵向改变为n个单元格的高度
}
else
{
iRowNo=j;
iColNo=i;
iRowSpan=1;
strTmp=tabTarget.Rows[j].Cells[i].Text.ToString().Trim(); //将当前单元格的值赋给临时变量
}
}
}
/***合并完毕***/

//添加明细项值

ViewState["id"]="";

for (int i=0;i<dtt.Rows.Count;i++)
{
for (int j=4;j<dtt.Columns.Count;j++)
{
TableCell dc = new TableCell();
if (bEdit) //可编辑时
{
TextBox txtBox = new TextBox();
txtBox.BorderStyle = BorderStyle.Solid;
txtBox.BorderWidth = Unit.Pixel(1);
txtBox.Width = Unit.Pixel(55);
txtBox.Font.Size= 9;
txtBox.CssClass="text3";
txtBox.ID = "txt_"+dtt.Rows[i][3].ToString()+"_"+j.ToString();
if (j==4) //将第四列转换为百分数
{
//txtBox.Text = (Convert.ToDouble(dtt.Rows[i][j].ToString())*100).ToString()+"%";
txtBox.Text = dtt.Rows[i][j].ToString();
}
else
{
txtBox.Text = dtt.Rows[i][j].ToString();
}
if (j==9 && dtt.Rows[i][j].ToString()!="") //将第9列时间转换为指定格式
{
txtBox.Text = ((DateTime)dtt.Rows[i][j]).ToString("yyyy-MM-dd");
}
else
{
txtBox.Text = dtt.Rows[i][j].ToString();
}
txtBox.ToolTip = txtBox.Text;
dc.Controls.Add(txtBox);
}
else //不可编辑时
{
if (dtt.Rows[i][j].GetType().ToString()=="System.DateTime") //将DateTime的值转换为需要的格式
{
dc.Text = ((DateTime)dtt.Rows[i][j]).ToString("yyyy-MM-dd");
}
else
{
dc.Text = dtt.Rows[i][j].ToString();
}

}

tabTarget.Rows[i+1].Cells.Add(dc);
}

ViewState["id"]=ViewState["id"]+dtt.Rows[i][3].ToString()+",";
}
//将每条纪录的流水号存放到ViewState中
if (ViewState["id"].ToString()!="")
{
ViewState["id"]=ViewState["id"].ToString().Substring(0,ViewState["id"].ToString().Length-1);
}

this.panShow.Controls.Add(tabTarget);
panShow.Visible = true;

return "";
}
catch (Exception e)
{
this.panShow.Controls.Add(tabTarget);
return e.Message;
}
}

#endregion
camlovecam 2003-08-21
  • 打赏
  • 举报
回复
如果这个不好用,那用datalist web 服务器控件可以吗?该怎样做呢?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧