DataGrid以编程方式设置列宽

时间:2011-12-28 14:41:59

标签: c# asp.net .net linq dataset

我有以下代码:

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

给出错误,因为列在查询被执行时计算,并且由于后期绑定而在最晚时刻执行。有什么办法可以设置这些列的宽度吗?

3 个答案:

答案 0 :(得分:1)

当数据源有一些要显示的内容时,会生成数据网格或网格视图。如果没有显示任何内容,则网格不会在页面上呈现。但是,如果要在没有数据的情况下显示网格,则添加骨架数据表或列表,以呈现网格,然后您的代码将起作用。此外,如果您粘贴网格的HTML,那将是一个更好的帮助

答案 1 :(得分: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>

请确保将autogenerate列设置为false,否则您将获得额外的列。

答案 2 :(得分:-2)

使用

DocumentGrid.DataSource = query.ToList();

然后您可以以编程方式设置宽度。这是因为query.ToList()提交数据并使它们可以被Document Grid.DataSource属性读取。