在解决这个问题的时候我也参考一些其他的例子,但是由于一些原因终究是没有得到我想要的结果,经过反复测试,终于想到一个自认为是终极版本的,要是大家还有更好的办法的,还望赐教。
我做的这个是在ASPX页面中将新闻标题过长的一段截取掉,换成...来代替,之前见过一个办法是先将数据绑定到GridView中,然后再遍历GridView中的每一行的数据进行截断,这个办法适合与该标题不是超级链接的时候,一旦做成超级链接的话,页面一经回发就暴露出问题来了,被截断的一部分又给加载上来了。所以我的办法是在数据从数据库中读取出来的以后就重写一下DataSet对象中的那个Table,在重写的时候就将字符串截断,这样的话,绑定到GridView上的时候就已经是被处理好了数据了,而不是先绑定再截断了。
具体的重写代码:
/*将过长的标题截断加上省略号*/
private void TruncatedString(string tableName, int how,DataSet ds)
{
/*参数tableName是你查询的那张表名,how是你要保留的字符串长度,根据需要更改,ds是你传进来的DataSet对象,即你想把哪个DataSet重写一下,那你就把哪个DataSet对象传进来即可。*/
//实例化一个Table
DataTable table = new DataTable();
//声明一列一行
DataColumn column;
DataRow row;
/*创建列、制定列的数据类型、字段名*/
/*需要注意的是,新创建的列要和你查询出来的那个表的结构一致,这样在替换表的时候才不会出现异常*/
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "_title";
table.Columns.Add(column);
//创建列、制定列的数据类型、字段名
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "_url";
table.Columns.Add(column);
//用循环将查询出来的表写入到新创建的表中
int j = ds.Tables[tableName].Rows.Count;
for (int h = 0; h < j; h++)
{
row = table.NewRow();
//取到查询出来的表中的数据写入到自己创建的表结构中
row["_url"] = ds.Tables[tableName].Rows[h].ItemArray[1].ToString();
string str = ds.Tables[tableName].Rows[h].ItemArray[0].ToString();
//判断,如果字符串的长度够上了保留的长度则进行截取
if (str.Length > how)
{
row["_title"] = str.Substring(0, how) + "...";
}
//否则不做任何操作,直接写入新的表中
else
{
row["_title"] = str;
}
table.Rows.Add(row);
}
table.TableName = tableName;
ds.Tables.Remove(tableName);
ds.Tables.Add(table);
}