wangyiwangyi 发表于 2016-11-2 15:29:32

自定义控件赋值与取值

本帖最后由 wangyiwangyi 于 2016-11-2 15:32 编辑

http://gcdn.gcpowertools.com.cn/data/attachment/forum/201611/02/150334rs174s1v8flshslm.png 如上图已经实现自定义控件加载到单元格,(我参照:http://blog.gcpowertools.com.cn/ ... E%A7%E4%BB%B6-.aspx)

现有以下二个问题:
1、读取控件多选值(取得的数据值需要保存到数据库)
   官方论坛的帖子查询未果,麻烦提供一个DEMO。自定控件取值。
2、查看状态下只看到值,双击显示下拉(与FarPoint.Web.Spread.ComboBoxCellType 效果)


现效果是: http://gcdn.gcpowertools.com.cn/data/attachment/forum/201611/02/151525efs7ks57y1v7fgh7.png 有输入框。

FarPoint.Web.Spread.ComboBoxCellType效果是:http://gcdn.gcpowertools.com.cn/data/attachment/forum/201611/02/151629wn583mkmrgmkr6g0.png ,http://gcdn.gcpowertools.com.cn/data/attachment/forum/201611/02/151657vcbx1m177bwnh00h.png

dexteryao 发表于 2016-11-2 17:20:48

您好,可否把您的demo发过来,这样处理起来更快一些

wangyiwangyi 发表于 2016-11-3 14:07:34

dexteryao 发表于 2016-11-2 17:20
您好,可否把您的demo发过来,这样处理起来更快一些

因工程文件较大且包含EXT内容,我只发控件对应文件,你加入你工程中即可,页面后台调用如下:


1、在Farpoint所在页面定义TestWebControlInCell

public class TestWebControlInCell : FarPoint.Web.Spread.BaseCellType
{
    public override Control PaintCell(string id, TableCell parent, FarPoint.Web.Spread.Appearance style, FarPoint.Web.Spread.Inset margin, object value, bool upperLevel)
    {
      Project_Report_ManualReportNew_OrgCommBox buc =                (Project_Report_ManualReportNew_OrgCommBox)parent.Page.LoadControl("OrgCommBox.ascx");
      buc.ID = "NewID";
      return buc;
    }

    public override Control GetEditorControl(string id, TableCell parent, FarPoint.Web.Spread.Appearance style, FarPoint.Web.Spread.Inset margin, object value, bool upperLevel)
    {
      return null;
    }
}


2、在Page_Load方法中加入
TestWebControlInCell usercontrol = new TestWebControlInCell();
this.FpSpread1.ActiveSheetView.Cells.CellType = usercontrol;


dexteryao 发表于 2016-11-3 17:29:20

您好,我这里仍在调试,明天给您答复。

dexteryao 发表于 2016-11-4 16:31:34

您好,由于时间关系,我这里简单实现了下您的需求,具体细节您还需要修改下。

            TestWebControlInCell usercontrol = new TestWebControlInCell();
            usercontrol.SpreadClientID = FpSpread1.ClientID;

    public class TestWebControlInCell : FarPoint.Web.Spread.GeneralCellType
    {
      public string SpreadClientID { get; set; }

      public override Control GetEditorControl(string id, TableCell parent, FarPoint.Web.Spread.Appearance style, FarPoint.Web.Spread.Inset margin, object value, bool upperLevel)
      {
            Table table = new Table();
            table.CellPadding = 0;
            table.CellSpacing = 0;
            table.BorderStyle = BorderStyle.None;
            table.BorderWidth = new Unit(0, UnitType.Pixel);
            table.Width = new Unit(100, UnitType.Percentage);

            TableRow row = new TableRow();

            TableCell cell = new TableCell();
            cell.VerticalAlign = VerticalAlign.Middle;
            cell.HorizontalAlign = HorizontalAlign.Left;
   
            OrgCommBox buc = (OrgCommBox)parent.Page.LoadControl("OrgCommBox.ascx");
            buc.SpreadClientID = this.SpreadClientID;
            //buc.ID = "NewID" + parent.ID;
            cell.Controls.Add(buc);
            row.Cells.Add(cell);

            table.Rows.Add(row);

            return table;
      }
}

<script>
    $(function () {
      var activeRow, activeCol;

      var mutipSel = $('#ms').change(function () {

            //   console.log($(this).val());
      }).multipleSelect({
            width: '100%',
            onClose: function () {

                var spread = document.getElementById("<%=SpreadClientID %>");
                var texts = mutipSel.data('multipleSelect').getSelects("text")


                spread.Cells(activeRow, activeCol).SetValue(texts);

                console.log($('#ms').val());
            },
            onOpen: function () {
                var spread = document.getElementById("<%=SpreadClientID %>");
                activeRow = spread.ActiveRow;
                activeCol = spread.ActiveCol;
                var values = spread.GetValue(activeRow, activeRow).split(",");
            //var texts = mutipSel.data('multipleSelect').setSelects(values)
               
            }

      });
    });
</script>

wangyiwangyi 发表于 2016-11-7 10:19:42

GetEditorControl方法是为了在编辑模式下弹出下拉选择,但现在的效果是,下拉多选显示异常。

dexteryao 发表于 2016-11-7 11:48:28

应该是 多选框那里的代码没执行。您吧 $(function () { 方法换成 setTimeout试试

wangyiwangyi 发表于 2016-11-29 11:42:05

本帖最后由 wangyiwangyi 于 2016-11-29 11:43 编辑

$(function () { 方法换成 setTimeout还是不行,
根据我发的DEMO,请给我提供一个简单的下拉多选择功能实现赋值与取值的例子。本需求我想很多人会用到,麻烦你们的技术提供一个完整的DEMO,谢谢!

dexteryao 发表于 2016-11-29 17:35:30

制作完整Demo会需要一些时间,我处理完后给您答复。

dexteryao 发表于 2016-12-13 14:03:04

请看附件
页: [1] 2
查看完整版本: 自定义控件赋值与取值