我现在是这样做的:
数据库中取出满足条件的数据集到一个dataset的datatable中,然后再对要固定长度的列进行判断,如果长度大于设定的宽度,则用substring函数截取,然后把截取的结果生成一个新列,用于显示。我写了一个专门的函数,如下,你看看对你有没有帮助:
//处理标题过长的标题,用………表示。
//参数dt_source表要修改的源表,str_title_column_name表作为标题的字段名,str_temp_title表去掉多余字符的字段名称,
//int_title_length表要显示的字符的长度。返回为一个datatable,它增加了一个名为str_temp_title的字段。
public void long_title(ref DataTable dt_source,string str_title_column_name,string str_temp_title_column_name,int int_title_lengh)
{

dt_source.Columns.Add(str_temp_title_column_name,System.Type.GetType("System.String"));
for(int i=0;i<=dt_source.Rows.Count-1;i++)
{
if (dt_source.Rows[i][str_title_column_name].ToString().Length>int_title_lengh+1)
{
dt_source.Rows[i][str_temp_title_column_name]=dt_source.Rows[i][str_title_column_name].ToString().Substring(0,int_title_lengh+1) + "……";
}
else
{ dt_source.Rows[i][str_temp_title_column_name]=dt_source.Rows[i][str_title_column_name];
}
}
}

解决方案 »

  1.   

    直接在模板的绑定中调用SubString函数最好。
      

  2.   

    各位说的方法都好,但是对于鼠标悬停后显示内容要怎么做呢?icyer说的用一个label 要怎么实现呢?还必须在页面上控制该label的位置等么chyich 说的方法,你做的时候,会不会因为要做一个循环并截取字符串而带来了性能的降低。
      

  3.   

    把没有截取数据的列绑定到tooltip控件上: 
    ToolTip='<%# DataBinder.Eval(Container.DataItem,"vc_file_title") %>'
    我用的不是datagrid,用的是datalist的itemtemplate,在模板里用了linkbutton控件。
    如果纪录条数不多,性能上没什么影响。多了就有点慢,但也只有这种方法。我没找到其他的方法。
    <asp:datalist id="dl_file" runat="server" RepeatDirection="Vertical" RepeatColumns="1">
    <ItemTemplate>
    <p>
    <img src="img/foldernew.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:LinkButton ID="lbn_file_name" Runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"n_file_pk") %>' ToolTip='<%# DataBinder.Eval(Container.DataItem,"vc_file_title") %>'>
    <%# DataBinder.Eval(Container.DataItem,"temp_title")%>
    </asp:LinkButton>
    </p>
    </ItemTemplate>
    </asp:datalist>
    datagrid中也这样做。
      

  4.   

    哈哈,我想到个最简单的方法,代码如下:
     Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As DataGridItemEventArgs) Handles DataGrid1.ItemDataBound        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
                CalcTotal(e.Item.Cells(4).Text)
                e.Item.Cells(4).Text = String.Format("{0:c}", Convert.ToDouble(e.Item.Cells(4).Text))
                e.Item.Cells(1).Text = Left(e.Item.Cells(2).Text, 4) + "..."
                e.Item.Cells(1).Attributes.Add("title", e.Item.Cells(2).Text)
            ElseIf e.Item.ItemType = ListItemType.Footer Then
                e.Item.Cells(0).Text = "Total"
                e.Item.Cells(4).Text = String.Format("{0:c}", runningTotal)
            End If
               End Sub