我使用以下两种方法来保存有关DataGridView和ListView的列信息。
我注意到方法非常相似,实际上我使用相同的数据结构来存储列设置。我为每列存储的属性是,Visible,Width,DisplayIndex
如何重新编写这个,以便我有一个可以处理DataGridView或ListView的函数?
我考虑过调查DataGridView和ListView是从公共类继承还是实现公共接口 - 但我不知道如何找到它。
此外,我已考虑扩展每个类以实现一个通用接口......但我不知道如何继续。
public void SaveDataGridView ( DataGridView view)
{
foreach (DataGridViewColumn col in view.Columns)
{
// save properties
}
}
public void SaveDataListView(ListView view)
{
foreach (ColumnHeader col in view.Columns)
{
// save properties
}
}
答案 0 :(得分:1)
在使用dynamic
关键字之前无法提高效果。
DataGridView.Columns和ListView.Columns没有共同的基本类型(IList
除外,请尝试,但我怀疑运气)。 ColumnHeader和DataGridViewColumn都没有。
答案 1 :(得分:0)
他们都继承自Control class。所以你可以写一个这样的函数:
public void SaveView(Control view)
{
if(view is DataGridView)
{
//stuff
}
if(view is ListView)
{
//stuff
}
}
控制是非常通用的,所以这个函数没有多大意义,因为有大量有效的参数。不幸的是,Grid和List不会从更具体的父类继承。
答案 2 :(得分:0)
我做了以下的事情
interface IView
{
void SaveView(Control control );
}
public class GridViewHelper : IView
{
public void SaveView(Control control)
{
var view = (DataGridView)control;
foreach (DataGridViewColumn col in view.Columns)
{
// save properties
}
}
}
public class ListViewHelper : IView
{
public void SaveView(Control control)
{
var view = (ListView)control;
foreach (ColumnHeader col in view.Columns)
{
// save properties
}
}
}