DataGrid 添加動態列

   
     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;

定義插入列的位置,從而計算以上列數

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章