现在的位置: 首页 > 综合 > 正文

datagridview 选择行

2014年02月11日 ⁄ 综合 ⁄ 共 1679字 ⁄ 字号 评论关闭

    public class Fun
    {
        //类型强制转换
        static public TObj ConverType<TObj>(object obj)
        {
            return (TObj)(obj);
        }
    }

    public class DataGridViewListSelected<TData>
    {
        private DataGridView _dgv = null;
        //保存选择的数据
        private dynamic _selectData = null;

        public DataGridViewListSelected(DataGridView dgv)
        {
            _dgv = dgv;
        }

        //指定索引选择
        public void Selected(int index)
        {
            var dataList = Fun.ConverType<List<TData>>(_dgv.DataSource);
            //没有数据
            if (dataList.Count <= 0)
            {
                return;
            }
            //索引值超出
            if (index >= dataList.Count)
            {
                index = dataList.Count - 1;
            }
            //选择行
            _dgv.CurrentCell = _dgv.Rows[index].Cells[0];
            _dgv.Rows[index].Selected = true;
        }
        //通过内容的判断选择
        public void Selected(Predicate<TData> predicate)
        {
            var dataList = Fun.ConverType<List<TData>>(_dgv.DataSource);

            int index = dataList.FindIndex(predicate);

            Selected(index);
        }

        //保存当前的数据
        public void SaveSelected()
        {
            var dataList = Fun.ConverType<List<TData>>(_dgv.DataSource);

            if (_dgv.SelectedRows.Count > 0)
            {
                _selectData = dataList[_dgv.SelectedRows[0].Index];
            }
            else
            {
                _selectData = null;
            }
        }

        //选择保存的数据 第一个参数为列表中的数据 ,第二个为已保存的数据 相等时返回true
        public void SelecedSaved(Func<TData, TData, bool> predicate)
        {
            var dataList = Fun.ConverType<List<TData>>(_dgv.DataSource);

            int index = dataList.FindIndex(rec => predicate(rec, _selectData));

            Selected(index);
        }
    }

抱歉!评论已关闭.