Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将来自其他类的数据放入datagridview_C#_Visual Studio_Oop - Fatal编程技术网

C# 无法将来自其他类的数据放入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();

你好。我已经将一个数据变量从一个类传递到另一个类,以主窗体的形式放入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
}
我创建数据表的代码

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已重新创建。我真的需要看完整的代码来确定哪个。如果你不想在这里发布,你可以给我发电子邮件。好的,先生。您需要代码的哪些部分?我也可以发电子邮件给你。