HeaderText 换行问题
问题描述
<asp:BoundField DataField="CabinName" HeaderText="等级 (Class)">
<ItemStyle HorizontalAlign="Center" Width="120px" Wrap="true" />
</asp:BoundField>
想实现:(即中文一行,英文一行)
等级
(Class)
解决方案一
protected void dataGridShoppingCar_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
TableCellCollection cells = e.Item.Cells;
cells[0].Text = "航班ID";
cells[1].Text = "船舱ID";
cells[2].Text = "航班日期 <br> (Sailing Date)";
cells[3].Text = "时间 <br> (Time of Departure)";
cells[4].Text = "航线 <br> (Sailing Route)";
cells[5].Text = "船公司 <br> (Ship Owner)";
cells[6].Text = "等级 <br> (Class)";
cells[7].Text = "等级 <br> (Class)";
cells[8].Text = "出发港口 <br> Departure Port";
cells[9].Text = "到达港口 <br> Arrival Port";
cells[10].Text = "票型 <br> ID";
cells[11].Text = "票型 <br> Ticket Type";
cells[12].Text = "单价 <br> Unit Price";
cells[13].Text = "张数 <br> Number of Ticket(s)";
cells[14].Text = "应付 <br> Due Payment";
//cells[15].Text = "取消购买 <br> Cancel the Purchase";
}
}
解决方案二
Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles GridView1.DataBound
Dim gv As GridView = CType(sender, GridView)
Dim c As TableCell
For Each c In gv.HeaderRow.Cells
c.Text = System.Web.HttpUtility.HtmlDecode(c.Text)
Next
End Sub
GridView控制項中,將HeaderText屬性中的文字換行
在預設的情況下,使用GridView的欄位編輯器來編輯HeadText的文字時,
若直接輸入HTML程式碼時,
則會將所輸入的照實顯示出來。
因為在預設的情況下,HeadText有經過HTML Encode,
所以所輸入的HTML tag會經過HTML Encode轉換成HTML的特殊字元碼,
就造成這樣的結果。
所以,要把我們所輸入的文字當作HTML來處理的話,只要將 HtmlEncode的屬性設定為 false,
就可以正確獲得我們所想要的結果了。
方案四
如果要给所有的列增加此属性:
protected void Page_Load(object sender, EventArgs e)
{
//正常换行
GridView1.Attributes.Add("style", "word-break:keep-all;word-wrap:normal");
//下面这行是自动换行
GridView1.Attributes.Add("style", "word-break:break-all;word-wrap:break-word");
if (!IsPostBack)
{
bind();//调用数据绑定即可
}
}
总之:善用CSS的word-break:break-all;word-wrap:break-word属性即可,这个属性是通用的对于顽固的南换行问题都可以解决,不局限于GridView。