zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Get distinct count of rows in the DataSet
    单引号双引号的html转义符
    PETS Public English Test System
    Code 39 basics (39条形码原理)
    Index was outside the bounds of the array ,LocalReport.Render
    Thread was being aborted Errors
    Reportviewer Error: ASP.NET session has expired
    ReportDataSource 值不在预期的范围内
    .NET/FCL 2.0在Serialization方面的增强
    Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
  • 原文地址:https://www.cnblogs.com/sung/p/2735059.html
Copyright © 2011-2022 走看看