0

Windowsフォームに1つのグリッドビューがあります。checkData.cs,個のファイルがありmyNames.csます。いくつかの関数を分割し、これらの関数をこれらの .cs ファイルに保持しました。すべてのファイルには名前空間があり、myNameSpace Program.cs ファイルには gridview があります。checkData.cs からその gridview にアクセスしようとすると、エラーが表示されThe data dataGridView1 doesnot exist in the current contextます。グリッド ビューにアクセスするには?

Program.csには次のコードがあります

namespace myNameSpace
{

    class Program : System.Windows.Forms.Form
    {
    private DataGridView dataGridView1;
    }
}

checkData.cs ファイルで、次のようにそのグリッドビューにアクセスしようとしています。

namespace myNameSpace
{
 public BindToGrid()
{
dataGridView1.dataSource = mySource; //assume that mySource has grid bound data
}
}
4

3 に答える 3

0

ここでは名前空間はそれほど重要ではありません。checkData.cs と myNames.cs のクラスやメソッドが静的かどうかはわかりませんが、フォーム オブジェクトの子として存在する DataGridView オブジェクトがあります。このオブジェクトにアクセスするには、アクセス元のクラスまたはメソッドに渡す必要があります。これを行う 1 つの方法は、コンストラクターに渡すことです。もう 1 つの方法は、クラスにプロパティを設定することです。個人的には、このオブジェクトにアクセスする必要があるメソッドをパラメーターとして直接渡すと便利だと思います。

または、実行していることが DataGridView のデータに影響を与え、ロジックをフォーム自体の外部に保持しようとしている場合は、ロジックを拡張メソッドに入れて、フォーム内から直接呼び出すことができます。

フォーム内から:

using MyExtensions; 

...

private void MyMethod()
{
    this.DataGridView1.CheckNames();
}

次に、CheckNames メソッド (Extensions.cs など) を使用して拡張クラスを作成します。

public static class Extensions
{

    public static void CheckNames(this DataGridView source)
    {
        // Do  your logic here.
    }

}

拡張メソッドは、特定のクラスに関連付けられているロジックを分離/再利用するのに非常に便利です。ここにドキュメントがあります。

于 2012-06-18T14:16:06.397 に答える
0

をパラメーターとして他のクラスに渡し、DataGridViewそれへの参照を格納します (クラスは C# では参照型であるため、非常に簡単です)。

編集: コーディング ゴリラの答えはそれを示しています。

于 2012-06-18T14:11:56.590 に答える
0

最も簡単な答えはcheckData.csmyNames.csファイル内のクラスがDataGridViewコンストラクターのパラメーターとして を受け取るようにすることです。何かのようなもの:

public class CheckData 
{
   public CheckData(DataGridView Gridview)
   {
       _gridView = GridView;
   }

   private readonly DataGridView _gridView;
}
于 2012-06-18T14:08:23.297 に答える