找回密码
 立即注册

QQ登录

只需一步,快速开始

rock3king

注册会员

1

主题

4

帖子

64

积分

注册会员

积分
64
  • 360

    金币

  • 主题

  • 帖子

最新发帖
rock3king
注册会员   /  发表于:2015-8-26 17:00  /   查看:6964  /  回复:7
在论坛中搜到关于列宽自动调整的帖子:
[外观]自动调整列宽以适应该列中最宽的文本
http://gcdn.gcpowertools.com.cn/showtopic-540.html
如何使列宽自动与列头显示内容相适应
http://gcdn.gcpowertools.com.cn/showtopic-18313.html
然后按照做
1、spead 没有定义head,直接databind
2、celltype=text    WordWarp=flase      

代码如下:
//数据绑定
                fpSpread_single_Sheet1.DataSource = dt;
                float len_txt = 0;
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    len_txt = fpSpread_single_Sheet1.GetPreferredColumnWidth(i);
                    fpSpread_single_Sheet1.Columns.Width = len_txt;
                }

但是显示结果如下:GetPreferredColumnWidth这个没有获取head的长度?

请大神分析下

7 个回复

倒序浏览
rock3king
注册会员   /  发表于:2015-8-26 17:03:00
沙发
1.png

2.png
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-8-26 17:29:00
板凳
您好,
您可以在设置fpSpread_single_Sheet1.Columns.Width时进行判断,如果大于当前值就改变,小于当前值就不做处理。您可以尝试下,看是否能够解决您的问题。
回复 使用道具 举报
rock3king
注册会员   /  发表于:2015-8-26 18:02:00
地板
回复 3楼frank.zhang的帖子

你好:
我没有设置表头。我是从数据库直接取了datatable,然后直接 fpSpread_single_Sheet1.DataSource = dt;
刚才试了下,Columns.Width=138(应该是默认的,并且应该为像素大小)。

我想实现的效果,当列的最大值>head的最大值,则列的宽度=列最大宽度,否则=head的最大宽度。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-8-27 11:22:00
5#
您好,
实现的思路是将WordWrap设置为false,在将Width设置为GetPreferredColumnWidth。
  1.         private void Form4_Load(object sender, EventArgs e)
  2.         {
  3.             string conStr = "Provider=Microsoft.JET.OLEDB.4.0;data source= " + Application.StartupPath + "\\NWind_CHS.mdb";
  4.             string sqlStr = "SELECT * FROM 产品";
  5.             System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(conStr);
  6.             DataSet ds = new DataSet();
  7.             System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(sqlStr, conn);
  8.             fpSpread1.ActiveSheet.DataAutoSizeColumns = true;
  9.             fpSpread1.ActiveSheet.DataMember = "产品";
  10.             da.Fill(ds);
  11.             fpSpread1.ActiveSheet.DataSource = ds;

  12.             MaxNum = ds.Tables[0].Columns.Count;

  13.             FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer ecr = new FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer();
  14.             ecr.WordWrap = false;
  15.             fpSpread1.ActiveSheet.ColumnHeader.DefaultStyle.Renderer = ecr;
  16.         }
复制代码

  1.         private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             float len_txt = 0;
  4.             for (int i = 0; i < MaxNum; i++)
  5.             {
  6.                 len_txt = fpSpread1.ActiveSheet.GetPreferredColumnWidth(i);
  7.                 fpSpread1.ActiveSheet.Columns[i].Width = len_txt;
  8.             }
  9.         }
复制代码


直接加载

2015-08-27_112126.jpg (44.12 KB, 下载次数: 262)

评分

参与人数 1满意度 +5 收起 理由
rock3king + 5 谢谢大神

查看全部评分

回复 使用道具 举报
rock3king
注册会员   /  发表于:2015-8-27 15:53:00
6#
回复 5楼frank.zhang的帖子

谢谢大神,已经解决。

另:看你的代码,是把整个spread的header对应的WordWrap=false
如果用Spread Design设置,是不是每列都要设置下?有没全设置的?

1.png
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-8-27 17:06:00
7#
回复 6楼rock3king的帖子

您好,
对整列进行设置也是可以得。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-9-6 15:17:00
8#
您好,问题已经解决,本帖关闭,如有其它问题,请开新帖。

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢

评分

参与人数 1满意度 +5 收起 理由
rock3king + 5 谢谢大神

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部