C# 无法将来自其他类的数据放入datagridview
你好。我已经将一个数据变量从一个类传递到另一个类,以主窗体的形式放入datagridview中。我在每种情况下都放置了一些消息框,以知道它访问了上述函数,并且数据被清楚地传递。但是当我运行程序时。该表没有将数据放入其中 这是我传递数据时的代码C# 无法将来自其他类的数据放入datagridview,c#,visual-studio,oop,C#,Visual Studio,Oop,你好。我已经将一个数据变量从一个类传递到另一个类,以主窗体的形式放入datagridview中。我在每种情况下都放置了一些消息框,以知道它访问了上述函数,并且数据被清楚地传递。但是当我运行程序时。该表没有将数据放入其中 这是我传递数据时的代码 if (txtCode1.ElementAt(intCtr + 1).Equals(val4)) { MessageBox.Show("Lol"); Compilourdes_GUI cmp = new Compilourdes_GUI();
if (txtCode1.ElementAt(intCtr + 1).Equals(val4)) {
MessageBox.Show("Lol");
Compilourdes_GUI cmp = new Compilourdes_GUI();
cmp.AddtotblLexeme(val2, val2);
break;
}
这是AddtotblLexeme的代码
public void AddtotblLexeme(string lexeme, string token) {
MessageBox.Show(lexeme+" "+token);
tblLexeme.Rows.Add(lexeme , token); //adding tokens and lexeme to the table
}
我创建数据表的代码
private void Start()
{
tbl1.AutoGenerateColumns = true;
tbl1.DataSource = null;
tbl1.Rows.Clear();
InitTable();
string txtCode1 = txtCode.Text;
LexicalAnalyzer lex = new LexicalAnalyzer(txtCode1);
lex.StartLex();
tbl1.DataSource = tblLexeme;
}
public void InitTable()
{
tblLexeme = new DataTable();
tblLexeme.Columns.Add("Lexeme", typeof(string));
tblLexeme.Columns.Add("Token", typeof(string));
}
DataTable tblLexeme = new DataTable();
这是输出的图像。测试单词应该在表中,但正如您所看到的,它没有被输入。好的,我想我理解您的问题。如果您直接在设计器中添加了列,我猜您添加了未绑定的列。如果是这样,则DataGridView无法将要添加到表中的行与之匹配。要解决此问题,请从DatagridView中删除列。然后,在设置DataSource=tblLexeme之前,确保DataGridView具有属性AutoGenerateColumns=true。现在有两件事会自动发生:首先DataGridView从DataTable中提取列;其次,当向DataTable添加新行时,它应该自动显示在DataGridView中 在AddtotblLexeme中,出于测试目的,您是否可以添加,以代替您的行。添加:
DataRow nR = tblLexeme.NewRow();
nR[0] = lexeme;
nR[1] = token;
tblLexeme.Rows.Add(nR);
然后在调试器中检查nR是否有一个包含2列的ItemArray。您没有显示此项的代码,但我认为tblLexeme是DataGridView?Program.compForm的数据源-这是什么?@JonathanWillcock yes。Sinatr,我将compForm初始化为GUI表单的一个新实例。在屏幕截图中显示列Lexeme和Token。这些是装订好的专栏吗?对不起。我不明白你的意思。我得到了这样一个错误:输入数组长于此表中的列数。@schwall请编辑您的问题,并显示创建DataTable的代码。它说找不到列0。然后要么尚未调用Start,要么DataTable已重新创建。我真的需要看完整的代码来确定哪个。如果你不想在这里发布,你可以给我发电子邮件。好的,先生。您需要代码的哪些部分?我也可以发电子邮件给你。