找回密码
 立即注册

QQ登录

只需一步,快速开始

szpzr

高级会员

138

主题

552

帖子

1754

积分

高级会员

积分
1754

活字格认证

szpzr
高级会员   /  发表于:2021-2-28 10:51  /   查看:3337  /  回复:9
版主:
     Win 下 Spread10的ComboxTypeCell单元格模糊输入有好的解决办法码?

9 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-28 21:09:32
沙发
问题已经收到,明天验证后给你回复
回复 使用道具 举报
szpzr
高级会员   /  发表于:2021-3-2 07:25:43
板凳
Richard.Ma:
    您好,应用上急需实现这个功能,请帮提供下帮助,谢谢!
   
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-2 09:20:54
地板
你好,昨天帮你验证了一下,这个目前没有办法完全实现,
但是Spread 的ComboxTypeCell提供了这两个属性,可以基本实现你需要的功能,
可以模糊筛选出数据,但是需要鼠标点击确认,不能在筛选出的数据上按方向键来选择,否则筛选列表会消失

image.png962838745.png
image.png721169738.png
回复 使用道具 举报
szpzr
高级会员   /  发表于:2021-3-2 13:41:42
5#
我是希望通过数据库查询结果添加到下拉列表中供选择,能否有自定义控件的办法实现?啊能提供下这方面的demo或参考!谢谢!
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-2 15:36:05
6#
如果是要绑定一个datatable 的话,可以使用MultiColumnComboBoxCellType
以及你需要的模糊查询功能,也可以在此基础上扩展
自定义单元格类型继承此类型,下面有一个参考代码,注意:因为此类型还是会自动填充单元格中的数据,因此无法完全实现模糊搜索,仅能首字母搜索



使用自定义类型
  1. fpSpread1.ActiveSheet.Cells[6, 6].CellType = new FilterComboCellType(datatable dt) ;
复制代码



自定义类型
  1.     public class FilterComboCellType: FarPoint.Win.Spread.CellType.MultiColumnComboBoxCellType
  2.     {
  3.         DataTable dt;
  4.         public FilterComboCellType(DataTable dt)
  5.         {
  6.             
  7.             this.EditorValueChanged += FilterComboCellType_EditorValueChanged;
  8.             this.DataSourceList = dt;
  9.             this.AutoSearch =  FarPoint.Win.AutoSearch.SingleCharacter;

  10.             this.DataColumn = 1;
  11.             this.ColumnEdit = 1;
  12.             this.ButtonAlign = FarPoint.Win.ButtonAlign.Right;
  13.             this.ListAlignment = FarPoint.Win.ListAlignment.Right;
  14.             this.ListWidth = 500;
  15.             this.ListOffset = 5;
  16.             this.MaxDrop = 5;
  17.             this.dt = dt;
  18.         }

  19.         private void FilterComboCellType_EditorValueChanged(object sender, EventArgs e)
  20.         {
  21.             if (this.GetEditorValue() == null || string.IsNullOrEmpty(this.GetEditorValue().ToString()))
  22.             {
  23.                 this.DataSourceList = dt;
  24.                 return;
  25.             }
  26.             string condition = dt.Columns[1].ColumnName + " like '%"+this.GetEditorValue()+"%'";
  27.             DataTable newdt = new DataTable();
  28.             newdt = dt.Clone();
  29.             DataRow[] dr = dt.Select(condition);
  30.             for (int i = 0; i < dr.Length; i++)
  31.             {
  32.                 newdt.ImportRow((DataRow)dr[i]);
  33.             }
  34.             this.DataSourceList = newdt;
  35.         }
  36.     }
复制代码
回复 使用道具 举报
szpzr
高级会员   /  发表于:2021-3-2 15:48:37
7#
好的,谢谢!我试试。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-2 15:57:46
8#
不客气
回复 使用道具 举报
szpzr
高级会员   /  发表于:2023-11-26 15:23:35
9#
博主:您好!下列代码中如何设置记录条目和行间距?
comboBoxType.Items = items;
                    comboBoxType.MaxDrop = items.Length;
                    cbo.ListControl.Items.Clear();
                    cbo.ListControl.Items.AddRange(items);
                    cbo.ShowList(true);
                    cbo.SelectedItem = null;
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-11-27 12:26:13
10#
行间距不支持设置

另外,没明白你说的如何设置记录条目,如果你是意思就是设置下拉选项的化,需要同时设置
ItemData和Items,前者是存储的值列表,后者是显示的值列表,一一对应。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部