protected void Grid_ItemDataBound(object sender,DataGridItemEventArgs e)
{
//控制grid中单元格内容显示的长度
if(e.Item.ItemType !=ListItemType.Footer && e.Item .ItemType !=ListItemType.Header )
{
int maxLength; if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
((Label)e.Item.Cells[3].Controls[1]).Text=((Label)e.Item.Cells[3].Controls[1]).Text.Substring(0,maxLength)+"..."; }

}我这样的时候显示的时候是达到了效果,但当我点EDIT,再点"SAVE"或"CANCEL"的时候,显示的长度又变为原始长度,好象这时候这个函数就没有执行,不知道怎么回事,哪里的代码有问题,谢谢!

解决方案 »

  1.   

    上面写错了一点, int maxLength=10;
      

  2.   

    给楼主一个示例
     Private Sub ConsumetoCashCardGrid_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles ConsumetoCashCardGrid.ItemDataBound
            If (e.Item.ItemType = ListItemType.EditItem) Then
                Dim box As TextBox
                box = CType(e.Item.Cells(1).Controls(0), TextBox)
                box.Width = Unit.Parse("60px")
                box = CType(e.Item.Cells(2).Controls(0), TextBox)
                box.Width = Unit.Parse("50px")
                box = CType(e.Item.Cells(3).Controls(0), TextBox)
                box.Width = Unit.Parse("50px")        End If
        End Sub
      

  3.   

    edit和cancel事件里各行里的control会重新创建,正确的做法是将你的代码写成函数,每执行datagrid事件后都添加该函数。
    最好的做法是用属性生成器将该列转化成模板,在模板里控制控件的长度