在实际情况中为了减少数据库的压力和提高性能会将一些字段的内容在数据库以代码的形式存储,而现实到用户界面的时候就需要用户能看懂的形式代替,这样你会发现表格字段的数据类型有改变,简单的更改后台返回的json串显然是不行的。怎么办呢?
显然表格的结果需要改变,在c#里提供了Clone的方法,我现在的思路是把表格字段的数据结构通过Clone以及更新必要字段的数据类型来实现。
/// <summary>
/// 将修改表的字段的类型并赋值
/// </summary>
/// <param name="dt">需要转换的表</param>
/// <returns>转换后的表</returns>
private DataTable UpdateDateTable(DataTable dt)
{
DataTable dtResult = new DataTable();
//克隆表结构
dtResult = dt.Clone();
foreach (DataColumn col in dtResult.Columns)
{
if (col.ColumnName == "event_level")
{
//修改列类型
col.DataType = typeof(String);
}
if (col.ColumnName == "event_flag")
{
//修改列类型
col.DataType = typeof(String);
}
if (col.ColumnName == "event_confirm_flag")
{
//修改列类型
col.DataType = typeof(String);
}
}
foreach (DataRow row in dt.Rows)
{
DataRow newrow = dtResult.NewRow();
newrow["id"] = row["id"];
newrow["event_name"] = row["event_name"];
//修改事件级别记录值
int eventLevels = int.Parse(row["event_level"].ToString());
switch (eventLevels)
{
case 1: newrow["event_level"] = "提示"; break;
case 2: newrow["event_level"] = "警告"; break;
case 3: newrow["event_level"] = "次要"; break;
case 4: newrow["event_level"] = "重要"; break;
case 5: newrow["event_level"] = "紧急"; break;
}
newrow["event_trigger_time"] = row["event_trigger_time"];
newrow["event_alarm_trigger_value"] = row["event_alarm_trigger_value"];
newrow["event_resume_time"] = row["event_resume_time"];
newrow["event_resume_trigger_value"] = row["event_resume_trigger_value"];
//修改事件状态记录值
int eventflag = int.Parse(row["event_flag"].ToString());
switch (eventflag)
{
case 1: newrow["event_flag"] = "告警"; break;
case 2: newrow["event_flag"] = "恢复"; break;
}
int confirmflag = int.Parse(row["event_confirm_flag"].ToString());
switch (confirmflag)
{
case 0: newrow["event_confirm_flag"] = "未确认"; break;
case 1: newrow["event_confirm_flag"] = "已确认"; break;
}
newrow["event_confim_time"] = row["event_confim_time"];
newrow["event_confimer"] = row["event_confimer"];
dtResult.Rows.Add(newrow);
}
return dtResult;
}
通过新旧表的替换,很容易将友好的数据显示给用户。
工作中遇到的问题认真的去做,发现会有很多新的尝试和挑战,所以每天都有进步。