2012-05-30 26 views
0

我有一个gridview自动生成的列,我以编程方式设置我想格式化列宽。这是我对我的背后代码GridView的代码...格式GridView

If Not Page.IsPostBack Then 
    Dim budgetTable As New DataTable("Budgets") 

    budgetTable.Columns.Add("Approval Date", GetType(Date)) 
    budgetTable.Columns.Add("Total Amount", GetType(String)) 
    budgetTable.Columns.Add("Comments", GetType(String)) 
    budgetTable.Columns.Add("Initials", GetType(String)) 

    Try 
     For i As Integer = 0 To 0 
      Dim tableRow As DataRow = budgetTable.NewRow() 
      tableRow("Approval Date") = Date.Today 
      tableRow("Total Amount") = "" 
      tableRow("Comments") = "" 
      tableRow("Initials") = "" 
      budgetTable.Rows.Add (tableRow) 
     Next 
     Session("BudgetsTable") = budgetTable 
     BindData() 
    Catch ex As Exception 

    End Try 
End If 

而且这是在HTML侧GridView控件:

<asp:GridView ID="gvOLIAdj" runat="server" CssClass="td8" CellPadding="4" ForeColor="#333333" PageSize="2" ViewStateMode="Enabled"> 
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 

    <Columns> 
     <asp:CommandField EditText="Add" ShowEditButton="True" /> 
    </Columns> 

    <EditRowStyle BackColor="#999999" /> 
    <FooterStyle BackColor="#003399" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="White" /> 
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
    <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
    <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
    <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
    <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
</asp:GridView> 
+0

这与VBA有什么关系? –

+0

我需要它在vb格式 – developthestars

+0

重复? - > http://stackoverflow.com/questions/546299/gridview-column-width-altering – rt2800

回答

1

- 编辑 -

(去除旧的内容,因为这将不会帮助)

尝试使用RowDataBound事件来设置宽度(或任何其他属性)。

未经测试的代码:

Protected Sub gvOLIAdj_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvOLIAdj.RowDataBound 
    If (e.Row.RowType = DataControlRowType.Header) Then 
     e.Row.Cells(0).Width = 100 '100 pixels 
     e.Row.Cells(1).Width = 50 
     e.Row.Cells(2).Width = 200 
     e.Row.Cells(3).Width = 150 
    End If 
End Sub 

如果上述方法无效,请尝试将它e.Row.RowType = DataControlRowType.DataRow

+0

@ rt2800和Predeep Kumar ...我尝试了这两个选项,我首先看到帖子...我不断收到一条错误消息“索引超出范围,必须是非负数,小于集合的大小。名称:索引“只要我打我的第一个动态创建列? – developthestars

+0

好的..我的坏。我只是忘记了你正在使用动态生成的列。列集合未针对动态生成的列进行更新(出于某种原因或其他原因,只有控制创建者才知道)。所以上界仍然为0.因此,你不能通过列号来解决它们。 –

+0

更新了上面的代码。试试看看它是否有任何帮助:) –

0

我会用样式表来完成它:

.td8 td:nth-child(3) { 
    width: 100px; 
} 

假设你想要的第三列是100像素。这是一个CSS3选项,所以它只能用于较新的浏览器。

编辑: 阅读您对@Pradeep Kumar所做的评论,您可能会过早地将宽度应用于列。在绑定并创建GridView后,尝试在Page_PreRender事件中进行这些更改。请记住,GridView中的列在之后才存在, RowItemCreated事件已完全完成。

+0

感谢大家的帮助,但没有任何工作......我即将放弃。大声笑 – developthestars

+0

@developthestars:你的样本中没有包含的一段代码就是你实际试图设置宽度的地方。也许如果你分享了你甚至试图这样做,我们可能会更有帮助。 –