sucsy 发表于 2015-5-12 10:56:00

设置sheet为Protect=true后无法调整列宽(WPF)

1、设置sheet为Protect=true后无法调整列宽。如不设置为protect则无法将单元格Locked。
2、可否设置某一列可自适应区域宽度?类似Grid中为列设置宽度为*的效果。

iceman 发表于 2015-5-12 15:17:00

回复 1楼sucsy的帖子

可以先调整行列宽度,再进行锁定,方法如下:

      private void button1_Click(object sender, RoutedEventArgs e)
      {
            int columnCount = this.gcSpreadSheet1.ActiveSheet.ColumnCount;
            int rowCount = this.gcSpreadSheet1.ActiveSheet.RowCount;
            for (int i = 0; i < columnCount; i++)
            {
                this.gcSpreadSheet1.AutoFitColumn(i);
            }

            for (int j = 0; j < rowCount; j++)
            {
                this.gcSpreadSheet1.AutoFitRow(j);
            }
            gcSpreadSheet1.ActiveSheet.Protect = true;


      }

sucsy 发表于 2015-5-12 16:39:00

设置了Protect后可否可以设置 “能够手动调整列宽”呢?
因为部分单元格可以编辑,一旦内容过多就无法显示全部内容,目前列宽和行高在Protect后都无法调整。

iceman 发表于 2015-5-12 18:14:00

回复 3楼sucsy的帖子

如果设置Protect属性,表单任何属性都不能更改。

明天我会继续跟进这个问题,看是否有完善的解决方法。

sucsy 发表于 2015-5-23 09:01:00

能否在不设置Protect=true的情况下Lock指定单元格?
protect以后很多事件都不可用了,并且我只是个别单元格需要锁定。

sucsy 发表于 2015-5-23 11:52:00

问题已经解决了,可以使用“EditStarting ”事件来处理
protected void BindData()
      {
            this.grdItems.ActiveSheet.CellChanged -= new EventHandler<CellChangedEventArgs>(ActiveSheet_CellChanged);
            this.grdItems.EditStarting -= new EventHandler<GrapeCity.Windows.SpreadSheet.UI.EditCellStartingEventArgs>(grdItems_EditStarting);
            this.grdItems.AutoRefresh = false;
            this.grdItems.SuspendCalcService();
            this.grdItems.SuspendEvent();

            CreateData();

            this.grdItems.ResumeEvent();
            this.grdItems.ResumeCalcService();
            this.grdItems.AutoRefresh = true;
            App.DoEvents();

            this.grdItems.ActiveSheet.CellChanged += new EventHandler<CellChangedEventArgs>(ActiveSheet_CellChanged);
            this.grdItems.EditStarting += new EventHandler<GrapeCity.Windows.SpreadSheet.UI.EditCellStartingEventArgs>(grdItems_EditStarting);         
      }

      void grdItems_EditStarting(object sender, GrapeCity.Windows.SpreadSheet.UI.EditCellStartingEventArgs e)
      {
            if (e.Column == 8 || e.Column == 10)
            {
                e.Cancel = true;
            }
            else
            {

                Row row = grdItems.ActiveSheet.Rows;
                if (row.Locked)
                {
                  e.Cancel = !(e.Column == 1 || e.Column == 9);
                }
            }
      }

iceman 发表于 2015-5-25 13:35:00

回复 6楼sucsy的帖子

好的,为了表示感谢你的反馈,给您分发 300 金币。可以用于兑换论坛奖品。
金币规则:点击进入
礼品列表:点击进入

iceman 发表于 2015-5-26 09:28:00

回复 1楼sucsy的帖子

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢   
http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062
页: [1]
查看完整版本: 设置sheet为Protect=true后无法调整列宽(WPF)