【问题标题】:When adding a row to DataGridView, a new blank row is added and data is added to the end of the current row向 DataGridView 添加行时,会添加一个新的空白行,并将数据添加到当前行的末尾
【发布时间】:2016-03-26 17:43:08
【问题描述】:

我正在尝试将数据手动添加到 DataGridView(显示学生当年出勤的网格视图)。问题是,当我向 DataGridView 添加一行数据而不是创建新行并将数据添加到其中时。创建一个新的空白行并将数据添加到顶行。以下是相关代码:

foreach (IndividualAttendanceRecord rec in DatabaseInterfacer.GetRecords("pi404"))
{
    if (dataGrid.ColumnCount < rec.Attendance.Count)
        dataGrid.ColumnCount = rec.Attendance.Count;

    List<String> row = new List<string>();
    foreach (string entry in rec.Attendance)
        row.Add(entry);

    string[] rowArray = row.ToArray<string>();
    dataGrid.Rows.Add(rowArray);
}

执行此代码会生成一个 DataGridView,其中所有数据在一行中,然后在底部有两个空行。

有什么帮助吗?

编辑: 仍然完全难倒这一点。我已经简化了我的代码并在 foreach 语句中添加了一些测试行,但我不明白为什么它的输出方式是这样的。这是我的新代码:

foreach (IndividualAttendanceRecord rec in DatabaseInterfacer.GetRecords("pi404"))
        {
            if (dataGrid.ColumnCount < rec.Attendance.Count)
                dataGrid.ColumnCount = rec.Attendance.Count;

            string[] row = rec.Attendance.ToArray<string>();
            dataGrid.Rows.Add(row);

            dataGrid.Rows.Add("1", "2", "3");
            dataGrid.Rows.Add("One", "Two", "Three");
        }

这是它的输出:http://i.imgur.com/f45mlod.png

我不明白为什么它仍然将 IndividualAttendanceRecord 中的所有信息单独放在一行中,然后创建一个空白行并放入“1 2 3”和“一二三”。

谁能明白为什么会这样?我可能真的很愚蠢。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    控件正在显示你说要显示的内容:

    首先,您通过将ColumnCount 设置为列表中的项目数来告诉网格创建一些列:

    dataGrid.ColumnCount = rec.Attendance.Count;
    

    然后您使用Add( params object[] values) 方法添加包含一些值的行。当您将数组传递给该方法时,它将添加一行并将这些值用作列:

    string[] rowArray = row.ToArray<string>();
    dataGrid.Rows.Add(rowArray);
    

    如果您想在单个列中添加所有值,您可以选择:

    dataGrid.ColumnCount = 1;
    foreach (string entry in rec.Attendance)
        dataGrid.Rows.Add(entry);
    

    【讨论】:

    • 我不确定我是否理解,我阅读代码的方式是这样的:对于我数据库中的每条记录,我检查它是否适合当前的网格。如果没有,那么我扩大网格。然后我制作一个列表并从记录中添加一组数据。然后我将此列表转换为数组并将该数组添加为新行。因此,如果我的数据库中有三个 IndividualAttendanceRecords,则应该有三行(每条记录一行)。实际上有三行,但列的数量是应有的三倍,并且所有数据都在一行中。
    【解决方案2】:

    我查看了我的其余代码并发现了问题。显示代码没有问题,问题实际上是在数据库中。由于某种原因,所有数据实际上都在数据库的一行中,下面有两个空行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      相关资源
      最近更新 更多