2011-12-28 54 views
0

我有以下的代码:数据网格设置列宽编程

protected void Page_Load(object sender, EventArgs e) 
    { 
     var src1 = Page.DataContext.ExtranetTypes; 
     var res1 = from row in src1 select row; 

     var src2 = Page.DataContext.ExtranetDocuments; 
     var res2 = from row in src2 select row; 

     var query = from r1 in res1 
        join r2 in res2 on r1.ID equals r2.FileTypeID 
        select new { r2.PublicationDate, Title = r2.Title, Type = r1.Title }; 

     DocumentGrid.DataSource = query; 
     DocumentGrid.DataBind(); 
    } 

我想设定的列的宽度,但我不能为每列设置的宽度,因为查询有尚未执行。

DocumentGrid.Columns[1].ControlStyle.Width 

给出了一个错误,因为当查询excecuted列进行计算,并且它在最新的时刻执行可能的,因为后期绑定。有什么办法可以设置这些列的宽度吗?

+0

看看这里http://odetocode.com/articles/218.aspx – 2011-12-28 14:46:58

+1

使用BoundField列而不是自动生成的列。 – adatapost 2011-12-28 15:00:31

回答

1

当数据源有一些东西要显示时,会生成一个datagrid或gridview。如果没有显示,那么网格不会在页面上呈现。但是如果你想在没有数据的情况下显示网格,那么添加一个骨架数据表或列表来渲染网格,然后你的代码就可以工作。此外,如果你贴网格的HTML,这将是一个马丽娟帮助

-2

使用

DocumentGrid.DataSource = query.ToList(); 

那么你可以设置宽度编程。这是因为query.ToList()提交数据并使它们可由DocumentGrid.DataSource属性读取。

+0

它不会解决问题,asd他要求增加宽度 – 2011-12-28 16:17:43

+0

query.ToList()命令后,他可以以编程方式设置宽度。 – Flaick 2012-01-10 09:46:24

0

我使用了BoundFields,因为我的问题中有一条评论的建议。

结果:

<asp:GridView ID="DocumentGrid" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:BoundField HeaderText="Publication Date" DataField="PublicationDate" ItemStyle-Width="120px"/> 
     <asp:BoundField HeaderText="Title" DataField="Title" ItemStyle-Width="400px"/> 
     <asp:BoundField HeaderText="Type" DataField="Type" ItemStyle-Width="100px"/> 
    </Columns> 
</asp:GridView> 

只要确保自动生成列设置为false,否则你会得到额外列。