DataGrid内容换行的问题。 这种问题是表格的通病,你若是设置datagrid的width为百分比的话,就容易出现这种问题,我还是觉得自己设定为象素宽的好,这样就不会换行了,但是推荐你还是用width,这样对浏览器的分辨率不同不存在兼容问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <asp:datagrid id="dg" runat="server"><SelectedItemStyle Wrap="False"></SelectedItemStyle><EditItemStyle Wrap="False"></EditItemStyle><AlternatingItemStyle Wrap="False"></AlternatingItemStyle><ItemStyle Wrap="False"></ItemStyle><HeaderStyle Wrap="False"></HeaderStyle><FooterStyle Wrap="False"></FooterStyle><PagerStyle Wrap="False"></PagerStyle></asp:datagrid>试试 Page_load:DataGrid1.Attributes.Add("style","word-break:keep-all;") 上面说的我都试过了,不行的,其实可能是datagrid的bug,或者生成的table里的<tr nowrap = 'nowrap'> 应该是<tr wrap = 'false'>,解决办法如下:private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e){ for(int i = 0;i < e.Item.Cells.Count;i++) { e.Item.Cells[i].Attributes.Add("nowrap","true") ; } } <%@ 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> <%@ 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] = "我是中文我是中文我.2354561531f1a sdf 3sd153 ds1g3 1sd是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文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) { BindGrid(); } } void BindGrid() { ItemsGrid.DataSource=CreateDataSource(); ItemsGrid.DataBind(); } void Item_Created(Object sender, DataGridItemEventArgs e) { if( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) e.Item.Cells[1].Text = "<nobr>" + e.Item.Cells[1].Text + "</nobr>"; } </script><body> <form runat="server"> <asp:DataGrid id="ItemsGrid" runat="server" BorderColor="black" OnItemDataBound="Item_Created" AutoGenerateColumns="false"> <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> 把不想换行的加e.Item.Cells[1].Text = "<nobr>" + e.Item.Cells[1].Text + "</nobr>"; 1 DataGrid1.Attributes.Add("style","word-break:keep-all;")2 把所有列的宽度都用具体数值写死(不用百分比)3 wrap 哪里有换行啊???<%@ 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(string))); for (int i = start_index; i < start_index + ItemsGrid.PageSize; i++) { dr = dt.NewRow(); dr[0] = i; dr[1] = @"我是中文文字,I am English words,我不想换行, I don't wanna have new lines,欢迎访问 <a href='http://dotnet.aspx.cc/'>http://dotnet.aspx.cc/</a>, 有好料啊:)"; dr[2] = DateTime.Now.ToString();; dt.Rows.Add(dr); } DataView dv = new DataView(dt); return dv;}void Page_Load(Object sender, EventArgs e) { //对于没有数字的内容,下面这行完全满足要求,但加了数字就不行,必须调用OnItemDataBound ItemsGrid.Attributes.Add("style","word-break:keep-all;word-wrap:normal"); //下面这行是自动换行 //ItemsGrid.Attributes.Add("style","word-break:break-all;word-wrap:break-word"); if (!IsPostBack) { BindGrid(); }}void BindGrid() { ItemsGrid.DataSource=CreateDataSource(); ItemsGrid.DataBind(); }void Item_DataBound(Object sender, DataGridItemEventArgs e) { if( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { e.Item.Cells[1].Text = "<nobr>" + e.Item.Cells[1].Text + "</nobr>"; e.Item.Cells[2].Text = "<nobr>" + e.Item.Cells[2].Text + "</nobr>"; }}</script><body><form runat="server"><asp:DataGrid id="ItemsGrid" runat="server" BorderColor="black" OnItemDataBound="Item_DataBound" AutoGenerateColumns="false"><AlternatingItemStyle BackColor="#DEDEDE"></AlternatingItemStyle><HeaderStyle BackColor="#EEEEFF" HorizontalAlign="Center"></HeaderStyle><Columns> <asp:BoundColumn HeaderText="序号" DataField="IntegerValue"/> <asp:BoundColumn HeaderText="文字" DataField="StringValue"/> <asp:BoundColumn HeaderText="价格" DataField="CurrencyValue" DataFormatString="{0:c}"> <ItemStyle HorizontalAlign="right"></ItemStyle> </asp:BoundColumn></Columns></asp:DataGrid></form></body></html> <nobr>所有浏览器都支持的,wrap在某些浏览器是不支持的 web获取客户端mac地址 请教一个网页与所加载的窗体控件交互的问题 asp刚转.net平台,问一下,如何共享函数的问题. 求助`` 怎么控制ListBox的边框样式? repeater 中如何设置行数是2或整除2的行中的TextBox 为只读 遇到大文件时下载很难打开 超菜的问题! 招贤榜:有人用过TestDirector7.2吗?其中的树形列表及右键定义控制菜单完美堪称完美,不过不知道是怎么实现的,故来此寻找高人!! 360浏览器不支持js的onbeforeunload函数,如何解决 如何向数据库中保存时间时只保存 小时:分钟? 请原谅我,关于OA还要说一次。
<SelectedItemStyle Wrap="False"></SelectedItemStyle>
<EditItemStyle Wrap="False"></EditItemStyle>
<AlternatingItemStyle Wrap="False"></AlternatingItemStyle>
<ItemStyle Wrap="False"></ItemStyle>
<HeaderStyle Wrap="False"></HeaderStyle>
<FooterStyle Wrap="False"></FooterStyle>
<PagerStyle Wrap="False"></PagerStyle>
</asp:datagrid>
试试
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
for(int i = 0;i < e.Item.Cells.Count;i++)
{
e.Item.Cells[i].Attributes.Add("nowrap","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>
<%@ 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] = "我是中文我是中文我.2354561531f1a sdf 3sd153 ds1g3 1sd是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文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)
{
BindGrid();
}
} void BindGrid()
{
ItemsGrid.DataSource=CreateDataSource();
ItemsGrid.DataBind();
}
void Item_Created(Object sender, DataGridItemEventArgs e)
{
if( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
e.Item.Cells[1].Text = "<nobr>" + e.Item.Cells[1].Text + "</nobr>";
} </script>
<body>
<form runat="server">
<asp:DataGrid id="ItemsGrid" runat="server"
BorderColor="black"
OnItemDataBound="Item_Created"
AutoGenerateColumns="false"> <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>
2 把所有列的宽度都用具体数值写死(不用百分比)
3 wrap
<%@ 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(string))); for (int i = start_index; i < start_index + ItemsGrid.PageSize; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = @"我是中文文字,I am English words,我不想换行,
I don't wanna have new lines,欢迎访问
<a href='http://dotnet.aspx.cc/'>http://dotnet.aspx.cc/</a>,
有好料啊:)";
dr[2] = DateTime.Now.ToString();;
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}void Page_Load(Object sender, EventArgs e)
{
//对于没有数字的内容,下面这行完全满足要求,但加了数字就不行,必须调用OnItemDataBound
ItemsGrid.Attributes.Add("style","word-break:keep-all;word-wrap:normal");
//下面这行是自动换行
//ItemsGrid.Attributes.Add("style","word-break:break-all;word-wrap:break-word");
if (!IsPostBack)
{
BindGrid();
}
}void BindGrid()
{
ItemsGrid.DataSource=CreateDataSource();
ItemsGrid.DataBind();
}void Item_DataBound(Object sender, DataGridItemEventArgs e)
{
if( e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Cells[1].Text = "<nobr>" + e.Item.Cells[1].Text + "</nobr>";
e.Item.Cells[2].Text = "<nobr>" + e.Item.Cells[2].Text + "</nobr>";
}
}</script>
<body>
<form runat="server">
<asp:DataGrid id="ItemsGrid" runat="server" BorderColor="black"
OnItemDataBound="Item_DataBound" AutoGenerateColumns="false"><AlternatingItemStyle BackColor="#DEDEDE"></AlternatingItemStyle>
<HeaderStyle BackColor="#EEEEFF" HorizontalAlign="Center"></HeaderStyle><Columns>
<asp:BoundColumn HeaderText="序号" DataField="IntegerValue"/>
<asp:BoundColumn HeaderText="文字" DataField="StringValue"/>
<asp:BoundColumn HeaderText="价格" DataField="CurrencyValue" DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="right"></ItemStyle>
</asp:BoundColumn>
</Columns></asp:DataGrid>
</form>
</body>
</html>