2017-02-04 68 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