我正在使用C#和ASP.NET,我在ASP页面上有以下内容:
<div id="divGrid" style='position:absolute; width:920px; height:400px; overflow:auto'>
<asp:GridView ID="GridView_Reports" runat="server" AutoGenerateColumns="true"
Width="1300px"
onselectedindexchanged="GridView_Reports_SelectedIndexChanged"
onrowdatabound="GridView_Reports_RowDataBound"
CellPadding="4" ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<EditRowStyle BackColor="#999999" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>
</div>
在代码隐藏中,我有这段代码:
//Now open the View and bind it to the GridView
string SelectView = "SELECT * FROM " + MySQLView + "";
SqlConnection con = new SqlConnection(str2);
SqlCommand SelectCmd = new SqlCommand(SelectView, con);
SqlDataAdapter SelectAdapter = new SqlDataAdapter(SelectCmd);
//Fill the dataset
DataSet RunReport = new DataSet();
SelectAdapter.Fill(RunReport);
GridView_Reports.DataSource = RunReport;
GridView_Reports.DataBind();
因此,正如您所看到的,数据集是动态创建的。我这样做是因为有几个可能的报告,我想尽可能地使它成为通用的。
从我的谷歌搜索看来,当动态完成时,gridview实际上并没有列。在那里,以下代码行将始终返回0:
int columnscount = GridView_Reports.Columns.Count;
对于我的生活,我不能弄清楚如何遍历所有列并动态设置它们的宽度。硬编码不是一种选择;整个表单是由表驱动的,因此添加新报表就像向表中添加信息一样简单,我不打算对20多个报表的列信息进行硬编码。 Rows.Count工作正常,必须有一种方法以某种方式循环列并设置其宽度?即使我可以让它们的宽度都相同,我也可以使用它,我只需要能够指定那个尺寸!
答案 0 :(得分:0)
我没有测试过这个,但可能值得一试。或者,您是否可以在DataBinding之后调用单独的方法来执行此操作。
在DataGrid中:
OnItemDataBound="dgMyGrid_ItemBound"
代码背后:
protected void dgMyGrid_ItemBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
e.Item.Cells["MyCol"].CssClass = "MyCssClass";
}
}
编辑:
道歉,没有正确地阅读你的问题。您使用DataGridView而不是DataGrid。试着看看这个:fix a columns width when a list is bound to a datagridview