DataGrid以编程方式设置列宽度

本文关键字:置列宽 方式 编程 DataGrid | 更新日期: 2023-09-27 18:19:01

我有以下一段代码:

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

给出一个错误,因为列是在执行查询时计算的,并且由于延迟绑定,它在可能的最晚时刻执行。我可以设置这些列的宽度吗?

DataGrid以编程方式设置列宽度

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

根据对我的问题的一个评论的建议,我使用了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,否则您将获得额外的列。

使用

DocumentGrid.DataSource = query.ToList();

则可以通过编程方式设置宽度。这是因为query.ToList()提交数据并使其可被DocumentGrid读取。DataSource属性。