c# DataTable重新调整成新DataTable,然后动态显示在HTML Table中

本文介绍了一个使用SQL查询从数据库中获取设备报警记录的方法,并展示了如何动态生成表格来展示查询结果。涉及条件过滤、分组及汇总等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人不是高手,下面是我做项目的时候写的代码,放在博客里面做个保存,看看是否有幸能给其他朋友提供参考。
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);
    }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值