1

我正在使用以下两种方法来保存有关 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   
      }
 }
4

3 回答 3

1

没有办法,直到使用dynamic关键字不会提高性能。

DataGridView.ColumnsListView.Columns没有共同的基本类型(除了IList,尝试但我怀疑任何运气)。ColumnHeader和DataGridViewColumn都没有

于 2013-02-10T02:19:15.667 回答
0

它们都继承自Control 类。所以你可以写一个这样的函数:

public void SaveView(Control view)
{
    if(view is DataGridView)
    {
        //stuff
    }
    if(view is ListView)
    {
        //stuff
    }
}

控制是非常通用的,所以这个函数没有多大意义,因为有大量的有效参数。不幸的是,Grid 和 List 没有从更具体的父类继承。

于 2013-02-10T02:15:46.213 回答
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
        }
    }
}
于 2013-02-10T13:21:52.887 回答