• wince下的Melior.NTable使用添加过滤器


       在wince和windows moble 开发中发现datagrid使用很不方便,项目中用到了第三方开源控件NTable,却发现这个控件是2004年国外开发的,使用资料及其稀少

    现在共享下其开发方法:

    下载源码后只需要在自己的数据源里面实现其

    : INTableModel接口里面的方法即可

    View Code
        class TestModel:INTableModel
        {
            #region ITableModel Members

            public int GetRowCount()
            {
                return 10000;
            }

            public int GetColumnCount()
            {
                return 4;
            }

            public string GetColumnName(int columnIndex)
            {
                if (columnIndex == 0)
                    return "序号";
                if (columnIndex == 1)
                    return "供应商";
                if (columnIndex == 2)
                    return "合同号";
                if (columnIndex == 3)
                    return "单号";

                return "Description";
            }

            public Type GetColumnClass(int columnIndex)
            {
                if (columnIndex == 0)
                    return typeof(int);

                return typeof (String);
            }

            public bool IsCellEditable(int rowIndex, int columnIndex)
            {
                return columnIndex == 1;
            }

            public object GetValueAt(int rowIndex, int columnIndex)
            {
                if (columnIndex == 0)
                    return rowIndex+1;
                if (columnIndex == 1)
                    return "供应商";
                if (columnIndex == 2)
                    return "合同号";
                if (columnIndex == 3)
                    return "单号";

                return "Tap for enter description";
            }

            public void SetValueAt(object aValue, int rowIndex, int columnIndex)
            {
               
            }

            public object GetObjectAt(int rowIndex, int columnIndex)
            {
                return null;
            }

            public event TableModelChangeHandler Change;

            #endregion
        }

    GetColumnName方法可以返回每列的列名

    GetValueAt可以把每个格子的数据返回

    你可以把自己的数据源的数据绑定上去

    下面是过滤器的实现

    View Code
        public class RequestListDataSource : INTableModel
        {
            #region ITableModel Members
            private EntityType _showType;
            private Collection<RequestListRequestListItem> _rows;
            private List<RequestListRequestListItem> _filterRows;

            public RequestListDataSource(RequestList data, EntityType type)
            {
                _showType = type;
                _rows = new Collection<RequestListRequestListItem>();
                _filterRows = new List<RequestListRequestListItem>();
                if (data != null)
                {
                    foreach (var item in data.RequestListItem)
                        _rows.Add(item);
                }
                _filterRows.AddRange(_rows);
            }

            public int GetRowCount()
            {
                //RequestList aa;aa.RequestListItem [0].
                return _filterRows.Count;
            }

            public int GetColumnCount()
            {
                if (_showType == EntityType.MaterialCKOutSelectListNum)
                    return 4;
                else
                    return 3;
            }

            public string GetColumnName(int columnIndex)
            {
                string result = "";
                if (columnIndex == 0)
                    result = "序号";

                if (_showType == EntityType.MaterialCKOutSelectListNum)
                {
                    if (columnIndex == 1)
                        result = "供应商";
                    else if (columnIndex == 2)
                        result = "合同号";
                    else if (columnIndex == 3)
                        result = "单号";
                }
                else
                {
                    if (columnIndex == 1)
                        result = "领用单位";
                    else if (columnIndex == 2)
                        result = "单号";
                }
                return result;
            }

            public Type GetColumnClass(int columnIndex)
            {
                if (columnIndex == 0)
                    return typeof(int);
                else
                    return typeof(String);
            }

            public bool IsCellEditable(int rowIndex, int columnIndex)
            {
                return false;
            }

            public object GetValueAt(int rowIndex, int columnIndex)
            {
                object result = null;

                if (rowIndex >= _filterRows.Count)
                    return result;

                if (columnIndex == 0)
                    result = rowIndex + 1;
                if (_showType == EntityType.MaterialCKOutSelectListNum)
                {
                    if (columnIndex == 1)
                        result = GetValueFromType(_filterRows[rowIndex].Vendor);
                    else if (columnIndex == 2)
                        result = GetValueFromType(_filterRows[rowIndex].Contract);   
                    else if (columnIndex == 3)
                        result = _filterRows[rowIndex].RequestNum;
                }
                else
                {
                    if (columnIndex == 1)
                        result = GetValueFromType(_filterRows[rowIndex].Receiver);  
                    else if (columnIndex == 2)
                        result = _filterRows[rowIndex].RequestNum;
                }

                return result;
            }

            public void SetValueAt(object aValue, int rowIndex, int columnIndex)
            {

            }

            public object GetObjectAt(int rowIndex, int columnIndex)
            {
                return null;
            }

            public event TableModelChangeHandler Change;

            #endregion

            public void SelectFilter(int columnIndex, string filter)
            {
                if (columnIndex <= 0)
                    return;
                Collection<RequestListRequestListItem> data;
                if (string.IsNullOrEmpty(filter))
                {
                    data = _rows;
                }
                else
                {
                    data = new Collection<RequestListRequestListItem>();
                    foreach (var item in _rows)
                    {
                        if (_showType == EntityType.MaterialCKOutSelectListNum)
                        {
                            if (columnIndex == 1)
                            {
                                if (GetValueFromType(item.Vendor).ToString().Contains(filter))
                                    data.Add(item);
                            }
                            else if (columnIndex == 2)
                            {
                                if (GetValueFromType(item.Contract).ToString().Contains(filter))
                                    data.Add(item);
                            }
                            else if (columnIndex == 3)
                            {
                                if (item.RequestNum != null && item.RequestNum.Contains(filter))
                                    data.Add(item);
                            }
                        }
                        else
                        {
                            if (columnIndex == 1)
                            {
                                if (GetValueFromType(item.Receiver).ToString().Contains(filter))
                                    data.Add(item);
                            }
                            else if (columnIndex == 2)
                            {
                                if (item.RequestNum != null && item.RequestNum.Contains(filter))
                                    data.Add(item);
                            }
                        }
                    }
                }
                _filterRows.Clear();
                _filterRows.AddRange(data);

                if (this.Change != null)
                    this.Change();
            }

            private object GetValueFromType(EmbedAttrType type)
            {
                object result = "";
                if (type != null && type.Value != null)
                    result = type.Value;
                return result;
            }
        }

    其中RequestListDataSource是自己的数据源

    在初始化处将自己的数据源转换成

    _rows

    然后添加过滤方法SelectFilter(int columnIndex, string filter),将过滤后的数据添加到_filterRows,最后绑定的是_filterRows

    由此实现了过滤数据作用

    附源码

    https://skydrive.live.com/redir?resid=3B411B3D816BE9A3!2751

  • 相关阅读:
    wm_syscommand
    VC中的#pragma指令的用法
    C语言|博客作业03
    C语言|博客作业09
    C语言|博客作业07
    C语言|博客作业05
    C语言|博客作业02
    C语言|博客作业08
    C语言|博客作业06
    C语言|博客作业04
  • 原文地址:https://www.cnblogs.com/sung/p/2735059.html
Copyright © 2020-2023  润新知