• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

如何“精确”控制datagrid当中的列宽度,不会因为绑定的数据不同,而宽度不同?希望进来看。

mutely 2004-10-28 05:18:11
我在一个页面上动态的添加了多个结构相同的datagrid,他们上下罗列,datagrid当中有BoundColumn和模板列,我通过设置“列的”.headerstyle(itemstyle\FooterStyle).width,来指定列的宽度,但是出现一个问题,多个datagrid绑定数据后,由于数据的精确长度不一致,导致,相同的列,在不同的datagrid当中的宽度不是精确的相同(相同的列上下宽度无法对齐),使用了<body style="WORD-BREAK: break-all;">,让长度过长的数据自动换行,

不知道如何设置才能确保不同的datagrid(结构完全相同)列的宽度,精确的,不会因为绑定的数据不同而宽度不同?

其实,我查阅了CSDN近期的帖子,我感觉问题的焦点是当数据是字符串时,字符串的是字母、汉字无规律混合,导致字符串的精确像素长度不一致,使得数据绑定后导致列宽发生偏差,如何解决。
由于CSDN无法贴图,只能文字描述了,大家勿怪。
...全文
126 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fkphp 2004-10-29
up一下
回复
goody9807 2004-10-29
Page_load:

DataGrid1.Attributes.Add("style","word-break:keep-all;")


<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script runat="server">
int start_index;
ICollection CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;

dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));

for (int i = start_index; i < start_index + ItemsGrid.PageSize; i++)
{
dr = dt.NewRow();

dr[0] = i;
dr[1] = "我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文sdfdsfdsfsd我是中文我是中文我是中文";
dr[2] = 1.23 * (i+1);

dt.Rows.Add(dr);
}

DataView dv = new DataView(dt);
return dv;
}

void Page_Load(Object sender, EventArgs e)
{
ItemsGrid.Attributes.Add("style","word-break:keep-all;word-wrap:normal");
if (!IsPostBack)
{
start_index = 0;
ItemsGrid.VirtualItemCount=100;
}
BindGrid();
}

void Grid_Change(Object sender, DataGridPageChangedEventArgs e)
{
ItemsGrid.CurrentPageIndex = e.NewPageIndex;
start_index = ItemsGrid.CurrentPageIndex * ItemsGrid.PageSize;
BindGrid();
}

void BindGrid()
{
ItemsGrid.DataSource=CreateDataSource();
ItemsGrid.DataBind();
}
</script>
<body>
<form runat="server">
<asp:DataGrid id="ItemsGrid" runat="server"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
AllowPaging="true"
AllowCustomPaging="true"
AutoGenerateColumns="false"
OnPageIndexChanged="Grid_Change">

<PagerStyle NextPageText="Forward"
PrevPageText="Back"
Position="Bottom"
PageButtonCount="5"
BackColor="#00aaaa">
</PagerStyle>

<AlternatingItemStyle BackColor="yellow">
</AlternatingItemStyle>

<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>

<Columns>

<asp:BoundColumn HeaderText="Number"
DataField="IntegerValue"/>

<asp:BoundColumn
HeaderText="Item"
DataField="StringValue"/>

<asp:BoundColumn
HeaderText="Price"
DataField="CurrencyValue"
DataFormatString="{0:c}">

<ItemStyle HorizontalAlign="right">
</ItemStyle>

</asp:BoundColumn>

</Columns>

</asp:DataGrid>
</form>

</body>
</html>
回复
mutely 2004-10-29
如何用脚本调整能,能不能给点思路!脚本我比较弱的
回复
mutely 2004-10-29
用脚本调整,需要进一步思考,真希望孟子多谈几句,还有没有其他的方法呢?
回复
xiaohutushen 2004-10-28
Study
回复
minrange 2004-10-28
提个问题:

如果输入的是一个长单词,如sssssssssssssssssssssssssssssssssss.....

不知道各位怎么解决呢?
回复
噯卟釋手 2004-10-28
Study
回复
goody9807 2004-10-28
6.DataGrid如何动态设置列宽,分别包括数据绑定和动态生成列两种情况的列宽设置?

win form:
DataGridTableStyle dgts = new DataGridTableStyle();
dgts.MappingName = "News";
dGridNews.TableStyles.Add(dgts);
DataGridTableStyle tableStyle = dGridNews.TableStyles["News"];
tableStyle.GridColumnStyles[1].Width =300;

web form:
width = 25%


7.DataGrid需要动态帮定不同的列,如何控制他的列宽?

----if(e.Item.ItemType==ListItemType.Header)
for(int i=0,j=e.Item.Cells.Count;i<j;i++){
e.Item.Cells[i].Width=System.Web.UI.WebControls.Unit.Pixel(20);
}

--- DataGrid1.Columns(9).HeaderStyle.Width = Unit.Pixel(100)

回复
cyokin 2004-10-28
你可以在客户端用js进行动态调整
看来只有这个方法咯
回复
孟子E章 2004-10-28
你可以在客户端用js进行动态调整
回复
minrange 2004-10-28
破点冷水,网页做不到吧

希望有人能给出答案,学习学习
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-10-28 05:18
社区公告
暂无公告