2

私はstackoverflow全体を検索しましたが、問題に対する適切な答えを見つけることができません。データテーブルの値をWindowsフォームのdatagridviewにバインドしたかったのです。特に1つのクラスのデータテーブルと個別のファイルのGridviewです。

これが私のコードです。

namespace MyProj
{
  public partial class ThisAddIn
{
  public string GetDetails()
    {
      // Some Codes here
      DataTable dt = new DataTable();
        dt.Columns.Add("id");
        dt.Columns.Add("uid");
        dt.Columns.Add("email");

        //Some codes here.I just only give a data table part only.

         DataRow row = dt.NewRow();

           row["id"] = sid;
           sid++;

           row["uid"] = uid;
           row["email"] = e;
           dt.Rows.Add(row);
    }
}
}

Gridviewを追加しようとしました。これがそのコードです。まず、[追加]-> [NewItem]-> [WindowsForm]を追加し、form1.csとして追加します

次に、ツールボックスからこのform1.csクラスにGridviewを追加します。次に、gridviewをダブルクリックします。

これが私のform1.csコーディングです

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        //ThisAddIn th = new ThisAddIn();
        this.dataGridView1.Visible = true;
        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.DataSource =dt; // here show dt does not contain the current context. 

}

両方のファイルは同じ名前空間の下にあります。クラスからオブジェクトを作成しようとすると(ThisAddIn th = new ThisAddIn();)、次のように表示されます。

ThisAddIn.ThisAddIn(Microsoft.Office.tools.Outlookファクトリファクトリ、IsServiceProvider serviceProvider)

このアドインには、0個の引数を取るコンストラクターは含まれていません

私はC#を初めて使用するので、この問題の解決に協力してください。説明付きの解決策を教えていただければ幸いです。

4

2 に答える 2

3

1)GetDetailsメソッドはDataTableを返す必要があるため、に変更しstringDataTabledt;

public partial class ThisAddIn
{
public DataTable GetDetails()
  {
  // Some Codes here
    DataTable dt = new DataTable();
    dt.Columns.Add("id");
    dt.Columns.Add("uid");
    dt.Columns.Add("email");
    DataRow row = dt.NewRow();    
     row["id"] = sid;
     sid++;    
     row["uid"] = uid;
     row["email"] = e;
     dt.Rows.Add(row);
     return dt;
  }
}

2)ThisAddInクラスをインスタンス化する方法に注目してから、GetDetailsメソッドを呼び出します。スコープがコンテキスト内にあるDataTableに結果を返します。

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    ThisAddIn th = new ThisAddIn();
    //Declare a DataTable and call to GetDetails
    DataTable dt =  th.GetDetails();
    this.dataGridView1.Visible = true;
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = dt;
}

3)インスタンス化ThisAddIn th = new ThisAddIn();すると、次のエラーが発生します。

このアドインには、0個の引数を取るコンストラクターは含まれていません

これを解決するには、クラスをインスタンス化するときにいくつかの値(パラメーターの引数)を指定する必要があります。

ThisAddIn th = new ThisAddIn(value1, value2, etc)
于 2013-02-10T03:52:39.697 に答える
0
  private void BindProductsGrid()
        {
            dataGridView1.Rows.Clear();
            DataTable dt = new DataTable();
            dt = bl.BindProducts();
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    dataGridView1.Rows.Add();
                    dataGridView1.AllowUserToAddRows = false;
                    dataGridView1.Rows[i].Cells[1].Value = dt.Rows[i]["Product_id"].ToString();
                    dataGridView1.Rows[i].Cells[2].Value = dt.Rows[i]["Product_name"].ToString();
                    dataGridView1.Rows[i].Cells[3].Value = dt.Rows[i]["Quantity"].ToString();
                }
            }
        }
于 2019-09-02T06:55:50.547 に答える