本人不是高手,下面是我做项目的时候写的代码,放在博客里面做个保存,看看是否有幸能给其他朋友提供参考。
int sumDt = 0;
//获取报警类型对应的内容
string alarmSql = "select Alarmcontent from AlarmType where EqName='海' ";
DataTable alarmDt = dbsql.Query(alarmSql).Tables[0];
string sql = "select eqip,alarmtype,count(AlarmId) as ip from alarmlog where 1=1 ";
// + "where EqIP like '%" + TextBox1.Text + "%' and AlarmTime = '" + s + "' and AlarmContent like '%" + TextBox3.Text + "%' and AlarmType like '%" + int.Parse(TextBox2.Text) + "%' ";
if (TextBox1.Text != "")
sql += "and EqIP like '%" + TextBox1.Text + "%' ";
if (TextBox2.Text != "")
sql += " and AlarmType like '%" + int.Parse(TextBox2.Text) + "%'";
if (TextBox3.Text != "")
sql += " and AlarmContent like '%" + TextBox3.Text + "%' ";
if (time.Text != "" && time.Text != "")
sql += " and convert(varchar(50), AlarmTime, 120) like '%" + time.Text + "%'";
sql += " group by eqip,alarmtype order by eqip asc ";
DataTable dt = dbsql.Query(sql).Tables[0];
DataTable dtSource = new DataTable();
dtSource.Columns.Add("设备IP", typeof(string));
for (int j = 0; j < alarmDt.Rows.Count; j++)
{
dtSource.Columns.Add(alarmDt.Rows[j][0].ToString(), typeof(string)); //动态添加新表的列
}
dtSource.Columns.Add("小计", typeof(string));
DataRow dr = dtSource.NewRow();
bool fet = false;
DataRow totalDr = dtSource.NewRow();
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dr[0].ToString() == dt.Rows[i][0].ToString())
{
sumDt += int.Parse(dt.Rows[i][2].ToString());
dr[int.Parse(dt.Rows[i][1].ToString())] = dt.Rows[i][2];
}
else
{
if (fet)
{
dr[alarmDt.Rows.Count + 1] = sumDt.ToString();
//以下是总计
//totalDr[0] = "总计";
//totalDr[int.Parse(dt.Rows[i][1].ToString())]=;
dtSource.Rows.Add(dr);
fet = false;
}
dr = dtSource.NewRow();
sumDt = 0;
sumDt += int.Parse(dt.Rows[i][2].ToString());
dr[0] = dt.Rows[i][0].ToString();
dr[int.Parse(dt.Rows[i][1].ToString())] = dt.Rows[i][2];
fet = true;
}
}
dr[alarmDt.Rows.Count + 1] = sumDt.ToString();
dtSource.Rows.Add(dr);
//以下是动态生成table显示
HtmlTableRow trHead = new HtmlTableRow();
for (int s = 0; s < dtSource.Columns.Count; s++)
{
HtmlTableCell tcHead = new HtmlTableCell();
tcHead.InnerText = dtSource.Columns[s].ToString();
trHead.Cells.Add(tcHead);
}//先生成table各列标题
table1.Rows.Add(trHead);
//下面是加载dtSource的数据列
for (int n = 0; n < dtSource.Rows.Count; n++)
{
HtmlTableRow tr = new HtmlTableRow();
for (int m = 0; m < dtSource.Columns.Count; m++)
{
HtmlTableCell tc = new HtmlTableCell();
tc.InnerText = dtSource.Rows[n][m].ToString();
tr.Cells.Add(tc);
}
table1.Rows.Add(tr);
}
//下面是最后一行加统计总数
int sumOther = 0;
HtmlTableRow trTotal = new HtmlTableRow();
for (int mm = 0; mm < dtSource.Columns.Count; mm++)
{
HtmlTableCell tcTotal = new HtmlTableCell();
if (mm == 0)
{
tcTotal.InnerText = "总计";
}
else
{
for (int nn = 0; nn < dtSource.Rows.Count; nn++)
{
if (dtSource.Rows[nn][mm] != null && dtSource.Rows[nn][mm].ToString() != "")
{
sumOther += int.Parse(dtSource.Rows[nn][mm].ToString());
}
}
tcTotal.InnerText = sumOther.ToString();
}
trTotal.Cells.Add(tcTotal);
sumOther = 0;
}
table1.Rows.Add(trTotal);
}