解决方案 »

  1.   

    使用  sqldependency  数据源改变 可以通知UI层,不过对于你来说  可能难了点。
      

  2.   

    从串口读到的数据显示在最后一行 你可以使用DataTable.add绑定到datagridview中  即DataTable第一行显示最新数据而取最新的数据库数据这个对你的业务来说没必要,  你新添加到数据业务起始是在串口传过来数据.  当你需要把数据存到数据库中的时候为何不往DataTable中add一行呢??
      

  3.   

    代码:
            foreach(..    List<..>){
       DataGridView.Rows.Insert(0,...,...)
    }
    上面是将数据显示到第一行.
      

  4.   


    谢谢!我后来用的就是你这个方法!!
    另外,能向你请教个Chart控件画图表的问题吗??获取X轴时间时,得到竟然是一大堆数字,完全看不出是时间,然后用chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "yyyy-MM-dd-HH:mm:ss";得到了想看到的时间,但,当我试图获取曲线上点的x轴时间坐标时,得到的却又是那串数字,而且用convert。toDateTime()却报错,“从“Double”到“DateTime”的强制转换无效。”求助!!我百度了一天,不好解决...
      

  5.   

    你知道局部刷新不?这个可以使用局部刷新,也是定时取数据,然后跟之前的数据进行比较,最后确定CRUD
      

  6.   

    或者用sql触发器也能实现主动推送。
      

  7.   

    但是如果更新很频繁,触发器的信息也会发的很频繁,dataGridView刷新会不会卡死??
      

  8.   

    如果只有一个用户使用的话,确实可以用5楼的办法
    但是如果有多个用户访问,并且用户可以修改删除数据的话,还是要去数据库中获取
    你可以将数据表设定为全局变量,在线程中访问数据库,在timer中只负责将数据表绑定到datagridviw
    包括你的串口通信,都应该是放到线程中,不要都用主线程去处理
      

  9.   


    谢谢!我后来用的就是你这个方法!!
    另外,能向你请教个Chart控件画图表的问题吗??获取X轴时间时,得到竟然是一大堆数字,完全看不出是时间,然后用chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "yyyy-MM-dd-HH:mm:ss";得到了想看到的时间,但,当我试图获取曲线上点的x轴时间坐标时,得到的却又是那串数字,而且用convert。toDateTime()却报错,“从“Double”到“DateTime”的强制转换无效。”求助!!我百度了一天,不好解决... /// <summary>
            /// 将数据库中 INT 类型的 秒数 转换成 DataTime类型的时间
            /// </summary>
            /// <param name="jip"></param>
            /// <returns></returns>
            public string TimeZH(string jip)
            {
                int ui = Convert.ToInt32(jip);
                DateTime s = new DateTime(1970, 01, 01);
                s = s.AddSeconds(ui);
                string jioo = s.ToString("yyyyMMdd-HH:mm:ss");
                return jioo;
            }
            /// <summary>
            /// 将DataTime的时间相减 得到 具体秒数 存到数据库中
            /// </summary>
            /// <returns></returns>
            public string TimeS()
            {
                string xsj = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                int yyyy = Convert.ToInt32(xsj.Substring(0, 4));
                int MM = Convert.ToInt32(xsj.Substring(5, 2));
                int dd = Convert.ToInt32(xsj.Substring(8, 2));
                int hh = Convert.ToInt32(xsj.Substring(11, 2));
                int mm = Convert.ToInt32(xsj.Substring(14, 2));
                int ss = Convert.ToInt32(xsj.Substring(17, 2));            DateTime s1 = new DateTime(yyyy, MM, dd, hh, mm, ss);
                DateTime s = new DateTime(1970, 1, 1, 0, 0, 0);
                TimeSpan d = s1 - s;
                int i = (int)d.TotalSeconds;
                string io = i.ToString();
                return io;
            }
            /// <summary>
            /// 将DataTime的时间相减 得到 具体秒数 存到数据库中
            /// </summary>
            /// <returns></returns>
            public string TimeSe(string fcs)
            {
                int yyyy = Convert.ToInt32(fcs.Substring(0, 4));
                int MM = Convert.ToInt32(fcs.Substring(5, 2));
                int dd = Convert.ToInt32(fcs.Substring(8, 2));
                int hh = Convert.ToInt32(fcs.Substring(11, 2));
                int mm = Convert.ToInt32(fcs.Substring(14, 2));
                int ss = Convert.ToInt32(fcs.Substring(17, 2));            DateTime s1 = new DateTime(yyyy, MM, dd, hh, mm, ss);
                DateTime s = new DateTime(1970, 1, 1, 0, 0, 0);
                TimeSpan d = s1 - s;
                int i = (int)d.TotalSeconds;
                string io = i.ToString();
                return io;
            }
        }
    到现在不知道你问题解决了没有  有一段时间没来CSDN了  上面的几方法可能对你有所帮助
      

  10.   


    谢谢!我后来用的就是你这个方法!!
    另外,能向你请教个Chart控件画图表的问题吗??获取X轴时间时,得到竟然是一大堆数字,完全看不出是时间,然后用chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "yyyy-MM-dd-HH:mm:ss";得到了想看到的时间,但,当我试图获取曲线上点的x轴时间坐标时,得到的却又是那串数字,而且用convert。toDateTime()却报错,“从“Double”到“DateTime”的强制转换无效。”求助!!我百度了一天,不好解决... /// <summary>
            /// 将数据库中 INT 类型的 秒数 转换成 DataTime类型的时间
            /// </summary>
            /// <param name="jip"></param>
            /// <returns></returns>
            public string TimeZH(string jip)
            {
                int ui = Convert.ToInt32(jip);
                DateTime s = new DateTime(1970, 01, 01);
                s = s.AddSeconds(ui);
                string jioo = s.ToString("yyyyMMdd-HH:mm:ss");
                return jioo;
            }
            /// <summary>
            /// 将DataTime的时间相减 得到 具体秒数 存到数据库中
            /// </summary>
            /// <returns></returns>
            public string TimeS()
            {
                string xsj = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                int yyyy = Convert.ToInt32(xsj.Substring(0, 4));
                int MM = Convert.ToInt32(xsj.Substring(5, 2));
                int dd = Convert.ToInt32(xsj.Substring(8, 2));
                int hh = Convert.ToInt32(xsj.Substring(11, 2));
                int mm = Convert.ToInt32(xsj.Substring(14, 2));
                int ss = Convert.ToInt32(xsj.Substring(17, 2));            DateTime s1 = new DateTime(yyyy, MM, dd, hh, mm, ss);
                DateTime s = new DateTime(1970, 1, 1, 0, 0, 0);
                TimeSpan d = s1 - s;
                int i = (int)d.TotalSeconds;
                string io = i.ToString();
                return io;
            }
            /// <summary>
            /// 将DataTime的时间相减 得到 具体秒数 存到数据库中
            /// </summary>
            /// <returns></returns>
            public string TimeSe(string fcs)
            {
                int yyyy = Convert.ToInt32(fcs.Substring(0, 4));
                int MM = Convert.ToInt32(fcs.Substring(5, 2));
                int dd = Convert.ToInt32(fcs.Substring(8, 2));
                int hh = Convert.ToInt32(fcs.Substring(11, 2));
                int mm = Convert.ToInt32(fcs.Substring(14, 2));
                int ss = Convert.ToInt32(fcs.Substring(17, 2));            DateTime s1 = new DateTime(yyyy, MM, dd, hh, mm, ss);
                DateTime s = new DateTime(1970, 1, 1, 0, 0, 0);
                TimeSpan d = s1 - s;
                int i = (int)d.TotalSeconds;
                string io = i.ToString();
                return io;
            }
        }
    到现在不知道你问题解决了没有  有一段时间没来CSDN了  上面的几方法可能对你有所帮助其实最后使用DateTime.FromOADate就解决了~~~
      

  11.   


    谢谢!我后来用的就是你这个方法!!
    另外,能向你请教个Chart控件画图表的问题吗??获取X轴时间时,得到竟然是一大堆数字,完全看不出是时间,然后用chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "yyyy-MM-dd-HH:mm:ss";得到了想看到的时间,但,当我试图获取曲线上点的x轴时间坐标时,得到的却又是那串数字,而且用convert。toDateTime()却报错,“从“Double”到“DateTime”的强制转换无效。”求助!!我百度了一天,不好解决... /// <summary>
            /// 将数据库中 INT 类型的 秒数 转换成 DataTime类型的时间
            /// </summary>
            /// <param name="jip"></param>
            /// <returns></returns>
            public string TimeZH(string jip)
            {
                int ui = Convert.ToInt32(jip);
                DateTime s = new DateTime(1970, 01, 01);
                s = s.AddSeconds(ui);
                string jioo = s.ToString("yyyyMMdd-HH:mm:ss");
                return jioo;
            }
            /// <summary>
            /// 将DataTime的时间相减 得到 具体秒数 存到数据库中
            /// </summary>
            /// <returns></returns>
            public string TimeS()
            {
                string xsj = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                int yyyy = Convert.ToInt32(xsj.Substring(0, 4));
                int MM = Convert.ToInt32(xsj.Substring(5, 2));
                int dd = Convert.ToInt32(xsj.Substring(8, 2));
                int hh = Convert.ToInt32(xsj.Substring(11, 2));
                int mm = Convert.ToInt32(xsj.Substring(14, 2));
                int ss = Convert.ToInt32(xsj.Substring(17, 2));            DateTime s1 = new DateTime(yyyy, MM, dd, hh, mm, ss);
                DateTime s = new DateTime(1970, 1, 1, 0, 0, 0);
                TimeSpan d = s1 - s;
                int i = (int)d.TotalSeconds;
                string io = i.ToString();
                return io;
            }
            /// <summary>
            /// 将DataTime的时间相减 得到 具体秒数 存到数据库中
            /// </summary>
            /// <returns></returns>
            public string TimeSe(string fcs)
            {
                int yyyy = Convert.ToInt32(fcs.Substring(0, 4));
                int MM = Convert.ToInt32(fcs.Substring(5, 2));
                int dd = Convert.ToInt32(fcs.Substring(8, 2));
                int hh = Convert.ToInt32(fcs.Substring(11, 2));
                int mm = Convert.ToInt32(fcs.Substring(14, 2));
                int ss = Convert.ToInt32(fcs.Substring(17, 2));            DateTime s1 = new DateTime(yyyy, MM, dd, hh, mm, ss);
                DateTime s = new DateTime(1970, 1, 1, 0, 0, 0);
                TimeSpan d = s1 - s;
                int i = (int)d.TotalSeconds;
                string io = i.ToString();
                return io;
            }
        }
    到现在不知道你问题解决了没有  有一段时间没来CSDN了  上面的几方法可能对你有所帮助其实最后使用DateTime.FromOADate就解决了~~~啊 哈哈 多找找就有了