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;
定義插入列的位置,從而計算以上列數