DataTable dtObjectInfoData =new DataTable();
var listProjectFormatData = dtObjectInfoData.AsEnumerable().Select(r => new
{
ObjectID = r["ObjectID"],
ObjectName = r["ObjectName"],
RowNo = r["RowNo"]
}).Distinct().OrderBy(r => r.RowNo);
iObjectCount = listProjectFormatData.Count();
foreach (var item in listProjectFormatData)
{
BoundColumn boundColumn = new BoundColumn();
boundColumn.HeaderText = item.ObjectName.ToString();
boundColumn.HeaderStyle.Width = Unit.Pixel(120);
this.dgData.Columns.AddAt(iFormatInsertIndex, boundColumn);
}
this.dgData.DataSource = dtData;
this.dgData.DataKeyField = "Outline";
this.dgData.DataBind();
获取数据然后循环去加载列表头;
下面则为循环加载数据行,由于加载的话会自动变更列的数目,因此如果再后台进行重新计算列数
protected void dgData_ItemDataBound(object sender, DataGridItemEventArgs e)
{
e.Item.Cells[4].Attributes.Add("style", "display:none");
e.Item.Cells[iObjectCount + iFormatInsertIndex + 2].Attributes.Add("style", "display:none");
CGeneral.SetDGCssClass(e, true, true, true, 2);
if (CGeneral.RowIsItem(e))
{
var listProjectFormatData = dtObjectInfoData.AsEnumerable().Select(r => new
{
ObjectID = r["ObjectID"],
ObjectName = r["ObjectName"],
RowNo = r["RowNo"]
}).Distinct().OrderBy(r => r.RowNo);
string strSubjectID = DataBinder.Eval(e.Item.DataItem, "SubjectID").ToString();
int i = 0;
foreach (var item in listProjectFormatData)
{
var data = dtObjectInfoData.AsEnumerable().Where(r => r.Field<string>("ObjectID") == item.ObjectID.ToString() && r.Field<string>("SubjectID") == strSubjectID).ToList();
if (data.Count() != 0)
{
e.Item.Cells[iFormatInsertIndex + i].Text = data.FirstOrDefault().Field<decimal>("BudgetCost").ToString("N2");
}
i++;
}
if (CGeneral.RowIsFooter(e))
{
e.Item.Cells[9].Text = primeCost.ToString("N2");
e.Item.Cells[iObjectCount + iFormatInsertIndex + 2].Text = salePrimePrice.ToString("N2");
}
}
private int iFormatInsertIndex = 12;
定义插入列的位置,从而计算以上列数