如何编写可以将DataGridView或ListView作为输入的方法?

时间:2013-02-10 02:07:10

标签: c# .net winforms listview datagridview

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

3 个答案:

答案 0 :(得分:1)

在使用dynamic关键字之前无法提高效果。

DataGridView.ColumnsListView.Columns没有共同的基本类型(IList除外,请尝试,但我怀疑运气)。 ColumnHeaderDataGridViewColumn都没有。

答案 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
        }
    }
}