奇怪,datatable 没有清除掉。
1.我在写程序的时候,如果一个窗体有 datagridview ,我一般就习惯把 datatable 建立成全局的,DataTable dt=new DataTable();
然后在当前文档的别的函数或按钮事件里也可以访问到 dt,并且在每个模块下如果需要填充 dt 就先清空他, dt.Clear();
可是我发现有的时候 Clear() 清空不了 dt,如下所示,我的 dt 是全局的,我在 窗体的 ComBox1的 SelectedValueChanged 事件中
if (ComBox1.Text == "北侧")
{
string sql = "select SL2_TB_X_NORTH_FAN_LOG.*,SL2_TB_X_NORTH_FAN_TEMP_LOG.* from SL2_TB_X_NORTH_FAN_LOG,SL2_TB_X_NORTH_FAN_TEMP_LOG where TO_CHAR(SL2_TB_X_NORTH_FAN_LOG.RECORD_DATE,'YYYY-MM-DD HH24') = TO_CHAR(SL2_TB_X_NORTH_FAN_TEMP_LOG.RECORD_DATE,'YYYY-MM-DD HH24') ";
OracleDataAdapter oda = new OracleDataAdapter(sql, connectDB.m_cnOrclQy);
OracleCommandBuilder ocb = new OracleCommandBuilder(oda);
oda.Fill(dt);
dgvMain.DataSource = dt;
dgvColHeaderA(dgvMain);
}
else if (ComBox1.Text == "南侧")
{
string sql = "select SL2_TB_X_SOUTH_FAN_LOG.*,SL2_TB_X_SOUTH_FAN_TEMP_LOG.* from SL2_TB_X_SOUTH_FAN_LOG,SL2_TB_X_SOUTH_FAN_TEMP_LOG where TO_CHAR(SL2_TB_X_SOUTH_FAN_LOG.RECORD_DATE,'YYYY-MM-DD HH24') = TO_CHAR(SL2_TB_X_SOUTH_FAN_TEMP_LOG.RECORD_DATE,'YYYY-MM-DD HH24') ";
OracleDataAdapter oda = new OracleDataAdapter(sql, connectDB.m_cnOrclQy);
OracleCommandBuilder ocb = new OracleCommandBuilder(oda);
oda.Fill(dt);
dgvMain.DataSource = dt;
dgvColHeaderB(dgvMain);
}
但是我每次切换 combox1 的 内容的时候都先 clear DT,但是我发现怎么一切换 Dt 的列就多了一倍呢,行没变,就列多了,并且如果多的话,那么再次切换就应该还继续多啊,可是就多一回,就不变了,我就奇怪了,我每次都是 clear 了啊。
我那个 SQL 语句的意思是从两个表查询 时间字段相等的记录,时间比较只精确到小时。
2.还有我每次设置 datagridview格式样式的时候是把datagridview作为参数传进一个函数里, dgvset(datagridview1)
函数 dgvset(Datagridview dgv)
{
dgv.BackgroundColor = Color.White;
dgv.RowHeadersWidth = 15;
……
}
这样的方法有什么缺点吗?