我有以下代码:
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
给出错误,因为列在查询被执行时计算,并且由于后期绑定而在最晚时刻执行。有什么办法可以设置这些列的宽度吗?
答案 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属性读取。