2017-02-04 67 views
2

運行應用程序時彈出錯誤。無法在GridView ASP.NET中設置列的寬度(沒有用於GridView的DataSource)

我想設置我的GridView的第一列的寬度,但我不能這樣做。

此GridView的行,列,數據不受任何DataSource限制。

//By Class Statistics 

int A1Available = get.countAvailA1(); 
int A1Alloted = get.countUnavailA1(); 
int B1Available = get.countAvailB1(); 
int B1Alloted = get.countUnavailB1(); 
int B2Available = get.countAvailB2(); 
int B2Alloted = get.countUnavailB2(); 
int C1Available = get.countAvailC1(); 
int C1Alloted = get.countUnavailC1(); 

DataTable dtClass = new DataTable(); 
dtClass.Columns.Add("Class"); 
dtClass.Columns.Add("A1"); 
dtClass.Columns.Add("B1"); 
dtClass.Columns.Add("B2"); 
dtClass.Columns.Add("C1"); 

DataRow r; 
r = dtClass.NewRow(); 
r["Class"] = "Number of Available Beds"; 
r["A1"] = A1Available.ToString(); 
r["B1"] = B1Available.ToString(); 
r["B2"] = B2Available.ToString(); 
r["C1"] = C1Available.ToString(); 
dtClass.Rows.Add(r); 

r = dtClass.NewRow(); 
r["Class"] = "Number of Unavailable Beds"; 
r["A1"] = A1Alloted.ToString(); 
r["B1"] = B1Alloted.ToString(); 
r["B2"] = B2Alloted.ToString(); 
r["C1"] = C1Alloted.ToString(); 
dtClass.Rows.Add(r); 

bedStats.DataSource = dtClass; 
bedStats.DataBind(); 
bedStats.Columns[1].HeaderStyle.Width = new Unit(55, UnitType.Percentage); 

使用此代碼來設置寬度。有沒有其他辦法?沒有打擾約值,只需設置寬度..

bedStats.Columns[1].HeaderStyle.Width = new Unit(55, UnitType.Percentage); 

錯誤的圖像

<code>enter image description here</code>

+0

縱觀截圖,'bedStats.Columns [1]'似乎是問題。如果你只是在這一行上有一個斷點,並且在嘗試訪問第二列([1])之前檢查'bedStats'列。你看到了什麼? –

+0

我增加了一個斷點,看着汽車,請問有什麼需要? @FredrikLundin – domster

回答

1

設置列值將只與TemplateFieldBoundField列工作。自動生成的列不屬於GridView中的列集合。如果您想爲報頭着色,則需要使用OnRowDataBound事件。只有這樣你才能訪問列。

protected void bedStats_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     e.Row.Cells[1].Width = new Unit(55, UnitType.Percentage); 
     e.Row.Cells[1].BackColor = Color.Pink; 
    } 
} 
+0

謝謝,修正! – domster