C# 重新加载表单时,名为[column name]的列已属于此数据表
我有一个为用户输入而设计的数据网格视图,然后将其放入数据库中的数据表中。当我加载表单时,所有内容都按照我的要求加载。但是,如果退出表单并重新加载,则会收到以下错误消息:C# 重新加载表单时,名为[column name]的列已属于此数据表,c#,datagridview,datatable,C#,Datagridview,Datatable,我有一个为用户输入而设计的数据网格视图,然后将其放入数据库中的数据表中。当我加载表单时,所有内容都按照我的要求加载。但是,如果退出表单并重新加载,则会收到以下错误消息: A column named 'line' already belongs to this DataTable “Line”是我声明的第一个列名 DataTable dt = new DataTable(); #region loadtable public void newquoteForm_Load(object send
A column named 'line' already belongs to this DataTable
“Line”是我声明的第一个列名
DataTable dt = new DataTable();
#region loadtable
public void newquoteForm_Load(object sender, EventArgs e)
{
getCompanyInfo();
loadTable();
}
private void loadTable()
{
dt.Clear();
DataRow dr;
dt.Columns.Add("Line");
dt.Columns.Add("Item Name");
dt.Columns.Add("Item Description");
dt.Columns.Add("Retail Price");
dt.Columns.Add("Supplier Number");
dt.Columns.Add("Quantity Required");
dt.Columns.Add("In Stock");
dt.Columns.Add("Cost Price");
dt.Columns.Add("Total Cost");
dt.Columns.Add("Total Retail");
dt.Columns["Line"].AutoIncrement = true;
dt.Columns["Line"].AutoIncrementSeed = -1;
dt.Columns["Line"].AutoIncrementStep = 1;
dt.Columns["Line"].ReadOnly = true;
dt.Columns["Item Name"].ReadOnly = true;
dt.Columns["Item Description"].ReadOnly = true;
dt.Columns["Cost Price"].ReadOnly = true;
dt.Columns["In Stock"].ReadOnly = true;
dt.Columns["Retail Price"].ReadOnly = true;
dt.Columns["Supplier Number"].ReadOnly = true;
dr = dt.NewRow();
dataGridView1.DataSource = dt;
}
我怎样才能防止这种情况发生呢?像这样吗
DataTable dt = new DataTable();
public newquoteForm()
{
InitializeComponent();
loadTable();
}
public void newquoteForm_Load(object sender, EventArgs e)
{
getCompanyInfo();
clearTable();
}
private void clearTable()
{
DataRow dr;
dt.Clear();
dr = dt.NewRow();
dataGridView1.DataSource = dt;
}
private void loadTable()
{
dt.Columns.Add("Line");
dt.Columns.Add("Item Name");
dt.Columns.Add("Item Description");
dt.Columns.Add("Retail Price");
dt.Columns.Add("Supplier Number");
dt.Columns.Add("Quantity Required");
dt.Columns.Add("In Stock");
dt.Columns.Add("Cost Price");
dt.Columns.Add("Total Cost");
dt.Columns.Add("Total Retail");
dt.Columns["Line"].AutoIncrement = true;
dt.Columns["Line"].AutoIncrementSeed = -1;
dt.Columns["Line"].AutoIncrementStep = 1;
dt.Columns["Line"].ReadOnly = true;
dt.Columns["Item Name"].ReadOnly = true;
dt.Columns["Item Description"].ReadOnly = true;
dt.Columns["Cost Price"].ReadOnly = true;
dt.Columns["In Stock"].ReadOnly = true;
dt.Columns["Retail Price"].ReadOnly = true;
dt.Columns["Supplier Number"].ReadOnly = true;
}
您可以将loadTable方法调用移动到表单构造函数。当表单重新加载时,没有人会再次创建它。所以,您的dt已经有列了。我建议从Form.Load handler中删除loadTable调用,并将其添加到表单构造函数中,表单构造函数调用了Load handler。当然,如果您想清除一个表,您仍然必须在Load handler中执行此操作,而且这很简单,您能否将其作为答案发布,以便我完成此问题?