我在整个stackoverflow上搜索,无法为我的问题找到合适的答案。 我想在Windows窗体中将数据表值绑定到datagridview。一个类中的数据表和Seperate文件中的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
然后我从工具箱中将Gridview添加到此form1.cs类中。然后双击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 Factory factory,IsServiceProvider serviceProvider)
此AddIn不包含带0参数的构造函数
我对c#更新鲜,请帮助我解决这个问题,如果你能给我一个解释很好的解决方案..
答案 0 :(得分:3)
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();
时,您会收到错误:
此AddIn不包含带0参数的构造函数
要解决此问题,您需要在实例化类时提供一些值(参数中的参数):
ThisAddIn th = new ThisAddIn(value1, value2, etc)
答案 1 :(得分: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();
}
}
}