您的位置:首页 > 其它

数据导入之前与导入之后的对比

2009-04-01 19:11 106 查看
场景描述:

在信息的变更过程中,比如计划的变更,表单基本信息的变更等,希望可以在一个列表中展现出该行数据是新增的,还是被删除的,还是被修改过的。在本文中,信息变更之前存在数据表A中,变更之后数据存放在表B中。如果不仔细思考的话,一般情况下,大家会通过拿出两个表的数据,每个表的每行记录都跟另一个表的所有记录做对比,来判断该记录是新增的,还是被删除的,还是被修改过的,下面介绍一种简单的方式。

sql描述:

protected void gvChangeProjectList_RowDataBound(object sender,GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.DataRow)

{

DataRowView drv = e.Row.DataItem as DataRowView;

int columns = drv.DataView.Table.Columns.Count;

if (drv["Status"].ToString() == "Added")

{

e.Row.Attributes.Add("title", "新建");

e.Row.BackColor = Color.FromArgb(0x66, 0xcc, 0xff);

}

else if (drv["Status"].ToString() == "Deleted")

{

e.Row.Attributes.Add("title", "删除");

e.Row.BackColor = Color.FromArgb(0xff, 0x66, 0x33);

}

else

{

for (int i = 要对比的第一个列; i < 要对比的最后一个列; i++)

{

TableCell tableCell = e.Row.Cells[i - 1]; //数据源中的列比列表中的列序号大1

bool equal = false;

int org = i + 要对比的列数;

if (drv[i] == DBNull.Value && drv[org] == DBNull.Value)

{

equal = true;

}

else if (drv[i] == DBNull.Value || drv[org] == DBNull.Value)

{

equal = false;

}

else

{

if (drv[i].GetType() == typeof(string))

{

equal = (string)(drv[i]) == (string)(drv[org]);

}

else if ( drv[i].GetType() == typeof(short) || drv[i].GetType() == typeof(int) )

{

equal =  ( drv[i].ToString().Trim() == drv[org].ToString().Trim() );

}

else if (drv[i].GetType() == typeof(DateTime))

{

equal = ((DateTime)(drv[i])).ToString("yyyy-MM-dd") == ((DateTime)(drv[org])).ToString("yyyy-MM-dd");

}

else if (drv[i].GetType() == typeof(bool))

{

equal = (bool)(drv[i]) == (bool)(drv[org]);

}

}

if (!equal)

{

string result = string.Empty;

if (drv[org].GetType() == typeof(DateTime))

{

result = string.Format("修改前数据: {0}", drv[org] == DBNull.Value ? string.Empty : ((DateTime)drv[org]).ToString("yyyy-MM-dd"));

}

else

{

result = string.Format("修改前数据: {0}", drv[org]);

}

tableCell.ToolTip = result;

tableCell.BackColor = Color.Yellow;

}

}

}

}

}



lastbeachhead

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: