请问如何在DataGrid控件中显示表格时,如何让每列的宽度固定
我用checkbox选择我要显示的各列,用DataGrid控件显示时,在列数比较多时,很多列就挤在一起,宽度不能固定,请问如何将DataGrid表格的宽度以固定宽度显示 问题点数:20、回复次数:16Top
1 楼zuoxxx(♂动感超哥♂)回复于 2006-03-01 18:24:27 得分 0
不设定DataGrid的宽度,让它根据列数自动伸缩就可以了吧Top
2 楼liuyactive()回复于 2006-03-01 20:30:07 得分 0
可是当我要显示的列很多的时候,它们都挤在一起,列名都不能正常显示,本来在一行里显示的列名变成竖着显示了,给人很不好的感觉Top
3 楼astra1(Hyperion)回复于 2006-03-01 23:25:36 得分 0
如果不是自动生成的列,可以在属性生成器的格式-列-列名 中设置宽度
如果是自动生成的列,可以实现ItemCreated行为的handle
例:
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Header)//如果是第一行TR
{
((TableCellCollection)e.Item.Cells)[0].Width=200;//第一列宽度设200
((TableCellCollection)e.Item.Cells)[2].Width=200;//第三列宽度设200
}
}Top
4 楼astra1(Hyperion)回复于 2006-03-01 23:29:15 得分 0
ItemCreated是DataGrid中的一种事件,在Grid生成Table的各种行(即TR)时触发Top
5 楼liuyactive()回复于 2006-03-02 15:46:59 得分 0
用((TableCellCollection)e.Item.Cells)[0].Width=200; 语句设置每列的宽度,岂不是把要显示的列数固定了,我要显示的列是动态的,有时可能是5列,有时可能是12列,根据选择而变化的。 当我选择的列不到我规定的列时,程序出现错误哦Top
6 楼astra1(Hyperion)回复于 2006-03-02 16:09:31 得分 0
以上只是提供一种方法,在你说的这种情景的话
你也可以遍历(TableCellCollection)e.Item.Cells)这个数组,因为他是页眉,也就是表格的第一行,这些元素的.Text属性也就是你的列名,你可以根据列名来赋不同的宽度
类似
if(e.Item.ItemType==ListItemType.Header)//如果是第一行TR
{
TableCellCollection tr=(TableCellCollection)e.Item.Cells;
for(int i=0;i<tr.Count;i++)//遍历所有列
switch(tr[i].Text)
{
case "VodTypeId"://判断列名
tr[i].Width=200;
break;
case "ParentTypeId":
tr[i].Width=120;
break;
}
}Top
7 楼liuyactive()回复于 2006-03-03 16:42:40 得分 0
我试了,还是有问题啊,是不是除了编写DataGrid1_ItemCreated事件,还有别的地方需要设置呢,真是烦人啊,我是一个菜鸟,请多多指教啊Top
8 楼hbzy123(DemoHunter)回复于 2006-03-03 16:55:23 得分 0
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" Width="100%" style="LINE-HEIGHT:180%">Top
9 楼hbzy123(DemoHunter)回复于 2006-03-03 16:56:10 得分 0
也可以是:style="LINE-HEIGHT:28"Top
10 楼hbzy123(DemoHunter)回复于 2006-03-03 17:00:38 得分 0
不需要DataGrid1_ItemCreatedTop
11 楼sWinZ(死蚊子)回复于 2006-03-03 17:25:03 得分 0
不知道楼主说的让列宽度固定 是在设计时还是在运行时Top
12 楼liuyactive()回复于 2006-03-03 22:14:19 得分 0
我要产生的列是要 AutoGenerateColumns="true"的,因为事先不知道要显示多少列,要根据客户选择的项数而定
列宽度固定应该是运行时了Top
13 楼astra1(Hyperion)回复于 2006-03-04 00:58:13 得分 0
不知道你还碰到什么问题,刚才实现了一个简单例子
http://211.152.33.150/HyperionBlog/GridColumnWidth.aspx
不知道是否就是你说的意思,源码给你参考下
http://211.152.33.150/HyperionBlog/Addon/csdn/test.rarTop
14 楼gsk99(ZJUT)回复于 2006-03-04 10:46:17 得分 0
如果你的DataGrid生成是由绑定列生成的,那么可以在DataGrid的属性生成器里面设置,很方便,在里面好好找好吧Top
15 楼mlnancy(泡泡)回复于 2006-03-04 11:28:22 得分 0
MARK一下,方便学习Top
16 楼lizi02(冬虫夏草)回复于 2006-03-04 12:19:08 得分 0
datagrid有width属性啊
我遇到你那样得情况我是要么把列数精简一下,要么在后台写个方法,在前台调用,这个方法得目的就是把一个列显示得个数控制,比如说这一列所有得单元格每个只显示4个汉字
这样效果很好得Top




