CSharp_DevExpress_编辑智能提示功能实现;
来源:互联网 发布:服装尺码软件 编辑:程序博客网 时间:2024/05/01 16:38
功能: 在RepositoryItemTextEdit内置编辑器编辑时,自动过滤匹配数据;
=>设计图
=>效果图
=>代码_FormView
using System;using System.Collections.Generic;using System.Data;using System.Windows.Forms;using HelloWorld.classEntity;using DevExpress.XtraEditors;using DevExpress.XtraEditors.Repository;using System.Collections;using DevExpress.XtraGrid.Views.Grid;using System.Drawing;using DevExpress.XtraGrid.Columns;namespace HelloWorld{ public partial class FormView : Form { // 数据表格 private readonly DataTable fvdt; // 数据列表 private readonly List<string> listData; // 过滤基数_修改后值 private string editStr; // 容器位置 private Point location; // 视图大小 private readonly int viewWidth; private readonly int viewHeight; public FormView() { InitializeComponent(); /// 初始数据_表格 fvdt = getDataTable(16); /// 初始数据_列表_指定智能提示列 listData = getDataList(fvdt, "name"); // 弹出容器_设置 int wvalue = getColumnWidth(fvgridview, "姓名"); fv_pccLbCtrl.Width = wvalue; fvpopupcctrl.Width = wvalue + 6; fv_pccLbCtrl.Height = 150; fvpopupcctrl.Height = 156; // 容器位置_(默认)记得手动调节位置(添加增量); location = new Point(getColumnX(fvgridview, "姓名") + 20, 56); // 视图大小_设置 viewWidth = fvgridctrl.Width; viewHeight = fvgridctrl.Height; } private void FormView_Load(object sender, EventArgs e) { // GridCtrl_绑定数据源 fvgridctrl.DataSource = fvdt; fvcolDel.Caption = " "; // 操作行; // 视图单击_获取鼠标坐标 fvgridview.MouseDown += fvgridview_MouseDown; // 名字_TextEdit RepositoryItemTextEdit fvcolNameTxt = new RepositoryItemTextEdit(); fvcolName.ColumnEdit = fvcolNameTxt; // 事件处理 fvcolNameTxt.Enter += fvcolNameTxt_Enter; fvcolNameTxt.EditValueChanged += fvcolNameTxt_EditValueChanged; fvcolNameTxt.Leave += fvcolNameTxt_Leave; // 容器列表_事件处理 fv_pccLbCtrl.SelectedIndexChanged += fv_pccLbCtrl_SelectedIndexChanged; // 性别_RepositoryItemLookUpEdit fvcolSexGluedi.DataSource = getSexEntityData(); fvcolSexGluedi.ValueMember = "SexId"; fvcolSexGluedi.DisplayMember = "SexString"; } /// <summary> /// 列表选择 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void fv_pccLbCtrl_SelectedIndexChanged(object sender, EventArgs e) { object obj = (sender as ListBoxControl).SelectedItem; if (obj != null) { DataRow row = fvgridview.GetFocusedDataRow(); row.BeginEdit(); row["name"] = obj.ToString(); row.EndEdit(); } } /// <summary> /// 视图单击_获取鼠标坐标 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void fvgridview_MouseDown(object sender, MouseEventArgs e) { // 鼠标位置 location.Y = e.Location.Y +10; if ((location.Y + fvpopupcctrl.Height) > viewHeight) { location.Y = viewHeight - fvpopupcctrl.Height; } /* // 传入最后列标题(如果是最后列就这样设置) if ((location.X + fvpopupcctrl.Width) > viewWidth) { location.X = viewWidth - getColumnWidth(fvgridview, "出生日期") - fvpopupcctrl.Width; } */ } /// <summary> /// 姓名编辑_进入编辑 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void fvcolNameTxt_Enter(object sender, EventArgs e) { if (!location.IsEmpty) {// 设置容器位置; fvpopupcctrl.Location = location; } fv_pccLbCtrl.Items.Clear(); fv_pccLbCtrl.Items.AddRange(listData.ToArray()); fvpopupcctrl.Show(); } /// <summary> /// 姓名编辑_值改变后 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void fvcolNameTxt_EditValueChanged(object sender, EventArgs e) { // 编辑器 TextEdit edit = sender as TextEdit; editStr = edit.EditValue.ToString(); // 用于过滤列表数据; fv_pccLbCtrl.Items.Clear(); fv_pccLbCtrl.Items.AddRange(listData.FindAll(getFilterResult).ToArray()); } /// <summary> /// 姓名编辑_焦点离开 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void fvcolNameTxt_Leave(object sender, EventArgs e) { fvpopupcctrl.Hide(); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// 过滤条件_列表 /// </summary> /// <param name="filter">列表项</param> /// <returns></returns> private bool getFilterResult(string filter) { bool flag = false; // 默认不匹配; if (editStr != null) { if (filter.IndexOf(editStr) >-1 ) { flag = true; } } return flag; } /// <summary> /// 指定列宽 /// </summary> /// <param name="gv">列所在视图</param> /// <param name="colCaption">列标题</param> /// <returns>指定列宽</returns> private static int getColumnWidth(GridView gv, string colCaption) { int withd = 0; // 距离; GridColumnCollection gcc = gv.Columns; IEnumerator enumerator = gcc.GetEnumerator(); GridColumn gc; while (enumerator.MoveNext()) { gc = (GridColumn)enumerator.Current; if (colCaption.Equals(gc.ToString())) { withd = gc.Width; break; } } return withd; } /// <summary> /// 列X距离 /// </summary> /// <param name="gv">列所在视图</param> /// <param name="colCaption">列标题</param> /// <returns>指定列x距离</returns> private static int getColumnX(GridView gv, string colCaption) { int columnX = 0; // 距离; GridColumnCollection gcc = gv.Columns; IEnumerator enumerator = gcc.GetEnumerator(); GridColumn gc; while (enumerator.MoveNext()) { gc = (GridColumn)enumerator.Current; columnX += gc.Width; if (colCaption.Equals(gc.ToString())) { break; } } return columnX; } /// <summary> /// 获列数据 /// </summary> /// <param name="dt">数据表</param> /// <param name="colName">列名</param> /// <returns>列数据集合</returns> private static List<string> getDataList(DataTable dt, string colName) { List<string> names = new List<string>(); if (dt.Rows.Count > 0) { foreach (DataRow r in dt.Rows) { names.Add((r[colName]).ToString()); } } return names; } /// <summary> /// 获数据表 /// </summary> /// <param name="rowNum">数据表行数</param> /// <returns>数据表</returns> private static DataTable getDataTable(int rowNum) { // 姓名部分数组 string[] fnames = new string[5] { "李", "岑", "唐", "楚", "梁" }; string[] mnames = new string[2] { "小", "大" }; string[] lnames = new string[6] { "莉", "宝", "龙", "源", "静", "堂" }; if (rowNum < 1) { rowNum = 6; } // 数据表 DataTable dtable = new DataTable(); dtable.Columns.Add("num"); dtable.Columns.Add("name"); dtable.Columns.Add("sex"); dtable.Columns.Add("birthday"); dtable.Columns.Add("del"); // 添加数据行 DataRow row; for (int i = 0; i < rowNum; i++) { row = dtable.NewRow(); row["num"] = "2014030800" + i; row["name"] = fnames[(i % 5)] + mnames[(i % 2)] + lnames[(i % 6)]; row["sex"] = ((i + 1) % 2) == 0 ? 0 : 1; row["birthday"] = DateTime.Today.AddYears(-(18 + i)).AddMonths(i % 12 + 1).AddDays(i % 28); row["del"] = false; dtable.Rows.Add(row); } return dtable; } /// <summary> /// 性别数据_RepositoryItemLookUpEdit /// </summary> /// <returns>性别列表</returns> private static List<SexEntity> getSexEntityData() { List<SexEntity> sexList = new List<SexEntity>(); sexList.Add(new SexEntity(0, "女")); sexList.Add(new SexEntity(1, "男")); return sexList; } }}
=>代码SexEntity实体类
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace HelloWorld.classEntity{ /// <summary> /// 性别类_SexEntity(int id, string str) /// </summary> public class SexEntity { // 性别submitValue private int sexId; public int SexId { get { return sexId; } set { sexId = value; } } // 性别showValue private string sexString; public string SexString { get { return sexString; } set { sexString = value; } } public SexEntity(int id, string str) { this.sexId = id; this.sexString = str; } public override string ToString() { return this.sexString; } }}
0 0
- CSharp_DevExpress_编辑智能提示功能实现;
- eclipse xml智能提示功能的实现
- C# DevExpress实现搜索智能提示功能
- C#实现智能提示(提示补全)功能
- NetBean智能提示功能
- Pycharm智能提示功能
- C# 实现百度搜索框智能提示功能
- 【输入智能提示功能】PHP+jQuery实现自动补全功能
- eclipse智能提示,实现VC编程助手功能
- C# 实现百度搜索框智能提示功能
- 【输入智能提示功能】PHP+jQuery实现自动补全功能
- MFC智能提示功能(通过CEdit和CListBox组合实现)
- Visual Studio Code 使用 Typings 实现智能提示功能
- eclipse实现智能提示
- eclipse配置 智能提示 行号 adt更新 xml编辑提示
- google智能提示完全实现
- 一行javascript实现智能提示
- 使用jquery 实现 仿google 的智能提示输入框功能
- UVA 562 (用硬币拼数额 DP 14.3.11)
- Struts2返回JSON对象的方法总结
- eclipse 中JAD.exe使用与配置
- django的权限管理系统permission
- 曲折的FileZilla Server提权之路
- CSharp_DevExpress_编辑智能提示功能实现;
- PHP下利用header()函数设置浏览器缓存的代码
- 图像滤波常见方法原理总结及VC下实现
- Oracle如何查找trace文件
- 单选按钮选中判断
- Ubuntu安装ssh及命令
- alsa 音频库的移植
- Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)
- java使用sax解析xml