如何在绑定到数据表时设置gridview列宽

我正在将表绑定到asp.net中的gridview

grdIssues.DataSource = mdtIssues; grdIssues.DataBind(); 

问题是我无法控制列宽,asp.net似乎决定了它自己的每列应该是什么宽度。 方法如

  grdIssues.Columns[0].ItemStyle.Width = 100; grdIssues.Columns[1].ItemStyle.Width = 100; 

不起作用,因为列是动态创建的。 我无法相信没有办法在手动创建每个列并填充每一行时做到这一点。

您不必手动创建列来设置宽度,您可以这样做

  foreach (DataControlField column in OrdersGV.Columns) { column.ItemStyle.Width = Unit.Pixel(100); } 

我能够使用RowDataBound事件更改某个Gridview列的宽度(绑定到Datatable ):

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { e.Row.Cells[0].Attributes["width"] = "200px"; } 

我喜欢随时回答我自己的问题,以便将来搜索post的用户都能找到答案。

我找不到直接做我想要的方法。 但是我发现如果我自己定义列,我可以更改属性。 在这个例子中,我想使列数据居中。 像这样的东西。

 BoundField bdfRaisedDate = new BoundField(); clsUtilities.SetBoundFieldCenter(ref bdfRaisedDate, "RaisedDateShort", "Opened", "RaisedDate"); grdIssues.Columns.Add(bdfRaisedDate); grdIssues.DataSource = mdtIssues; grdIssues.DataBind(); public static void SetBoundFieldCenter(ref BoundField bdfAny, string pDataField, string pHeadingValue, string pSortExpression) { bdfAny.DataField = pDataField; bdfAny.HeaderText = pHeadingValue; bdfAny.SortExpression = pSortExpression; bdfAny.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; bdfAny.ItemStyle.HorizontalAlign = HorizontalAlign.Center; } 

我做到了:

 gridView1.HeaderRow.Cells[0].Attributes["Width"] = "100px"; gridView1.HeaderRow.Cells[1].Attributes["Width"] = "50px"; gridView1.HeaderRow.Cells[2].Attributes["Width"] = "200px"; 

我这样做:

 foreach (DataControlField field in grdIssues.Columns) { field.HeaderStyle.Width = 100; }