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

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

现在共享下其开发方法:

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

: INTableModel接口里面的方法即可

 

wince下的Melior.NTable使用-添加过滤器 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可以把每个格子的数据返回

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

 

下面是过滤器的实现

 

wince下的Melior.NTable使用-添加过滤器 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

你可能感兴趣的:(table)