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);
}
}