美好的一天。我已将数据变量从一个类传递到另一个类,以放入主窗体中的datagridview。我在每种情况下都放了一些消息框,以便知道它访问了所述函数并且数据显然已通过。但是当我运行该程序时。该表并没有将数据放入其中。
以下是传递数据时的代码
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
}
我制作DataTable的代码
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();
这是输出的图像。 " TEST" word / s应该在表格内,但正如你所看到的,它并没有被放入。
答案 0 :(得分:1)
好的,我想我理解你的问题。如果您直接在设计器中添加了列,我的猜测是您添加了未绑定的列。如果是这样,那么DataGridView无法匹配您要添加到表中行的行。要解决此问题,请从DatagridView中删除列。然后在设置DataSource = tblLexeme之前,确保DataGridView具有属性AutoGenerateColumns = true。现在有两件事情自动发生:首先,DataGridView从DataTable中获取列;第二,在向DataTable添加新行时,它应该在DataGridView中自动显示。
在AddtotblLexeme中,出于测试目的,您可以添加,代替您的Rows.Add():
DataRow nR = tblLexeme.NewRow();
nR[0] = lexeme;
nR[1] = token;
tblLexeme.Rows.Add(nR);
然后在调试器中检查nR是否有一个包含2列的ItemArray。