将数据表数据绑定到Windows窗体中的Gridview

本文关键字:Gridview 窗体 Windows 数据表 数据绑定 | 更新日期: 2023-09-27 17:58:36

我在stackoverflow中到处搜索,却找不到适合我的问题的答案。我想将数据表值绑定到windows形式的datagridview。特别是一个类中的数据表和Sepate文件中的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,这是代码。首先我添加了add->NewItem->WindowsForm&添加为form1.cs

然后我从工具箱中将Gridview添加到这个form1.cs类中。然后双击网格视图。

这是我的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服务提供商)

此加载项不包含接受0个参数的构造函数

我是c#的新手,请帮我解决这个问题,如果你能给我一个带解释的解决方案,那就太好了。。

将数据表数据绑定到Windows窗体中的Gridview

1)GetDetails方法必须返回DataTable,所以我将string更改为DataTable并返回dt;

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)
  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();
                }
            }
        }