1

次の2つの方法を使用して、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、試してみてください。ただし、運が悪いかどうかは疑問です)。ColumnHeaderDataGridViewColumnのどちらにもありません。

于 2013-02-10T02:19:15.667 に答える
0

どちらもControlクラスから継承します。したがって、次のような関数を作成できます。

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

制御はかなり一般的であるため、有効なパラメーターが大量にあるため、この関数はあまり意味がありません。残念ながら、グリッドとリストはより具体的な親クラスから継承しません。

于 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 に答える