公司系统是一个缝缝补补又一年
随着业务量与数据量增加而越来越拉的远古ASP.NET系统
许许多多特性都被公司自己的组件和WebForm本身的组件限制得死死的
再结合甲方各种奇葩要求,有些数据甚至只能够通过建立临时表的形式再分别插入
有些sql代码久远且缺乏维护,甚至大量使用SQL进行计算,联合查询量巨大,系统速度也很慢,
数据表结构缺乏规范,查询某项数据需要大量联合查询,无数据字典,同事命名过于放飞自我,甲方需要的数据动不动就需要联合查询很大一部分表,且手写SQL语句,每天都在怀疑人生(河里摸鱼)
以下是死亡代码展示(大雾):
BoundField 本身是ASP.NET GridView 表格控件的一部分。
通过绑定数据源生成数据,控件的初衷自然而然是为了简化操作。
由于对ASP远古控件巨不熟悉且。。
本着不影响老板赚钱缝缝补补继续使用的原则(x)
可能只能用一些蠢蠢的办法(也有可能是因为自己蠢蠢吧 不过ASP放到今天真的是yue)
公司的表格依赖于自定义控件,基于GridView,通过接收后台返回DataTable呈现数据。
而甲方想要根据某分类来动态生成表格,受限于只能使用公司控件
又想着反正量不大(应该)能用就行(x)
结合官方文档
发现可以在后台新建BoundField对象并通过属性对应赋值,从而达到ASP.NET动态生成表格的目的。
嗯。。。
直接SELECT:
public int QueryMsfsAreaDivi_Gj_ColCounts()
{
string excSql = "SELECT Count(DISTINCT dbo.f_GetTopParentTypeName(a.typeId,'')) as TopTypeNum " +
"FROM Specifications AS a";
return (int)DtQuery(excSql).Rows[0]["TopTypeNum"];
}
查询SQL通过高端不经过思考的循环加上对应列:
int ColCounts = QueryMsfsAreaDivi_Gj_ColCounts();
string ColCountsSql = "";
for (int i = 0; i <ColCounts; i++)
{
if (i == ColCounts - 1)
{
ColCountsSql += "0 AS TypeName_" + i + "";
break;
}
ColCountsSql += "0 AS TypeName_" + i + ",";
}
..............
sql = "SELECT DISTINCT ISNULL(Area.AreaName1,'')AS Region,a.DeviceArea,0 AS InGuaranteesDateNum,0 AS NotInGuaranteesDateNum,0 AS AllNum," +
""+ColCountsSql+" " +
..............
再使用在后台根据SELECT数量New BoundField,并设置对应的DataField(如果DataField与数据源(Datatable)不一致控件就会报错):
private void InitGrid(string order)
{
for (int i = 0; i < ColCounts; i++)
{
ColCountsNames = "TypeName_" + i.ToString();
BoundField DynamicGeCols = new BoundField
{
HeaderText = ColCountsNames,
DataField = ColCountsNames,
DataFormatString = "{0:0}",
HtmlEncode = false,
SortExpression = ColCountsNames
};
GvData.Columns.Add(DynamicGeCols);
}
PageNavigator1.Total = 1;
PageNavigator1.SetCurPage(1);
PageNavigator1.ForceQueryAll = true;
PageNavigator1.Query = ServiceFactory.getServiceAccount().QueryMsfsAreaDivi_Gj(stDept.Value, ddlType.SelectedValue, ddlYear.SelectedValue, ddlMonth.SelectedValue, "", FormHelper.GetClientIPEx(), true).ToString();
}
效果如下:
嗯。。。每天都不知道自己在跟这帮沙雕SQL和同事沙雕代码较什么劲。。(已经穿越回十年前了)
至于列名的话。。马上就下班点了 摸鱼Time摸鱼Time!