当您看到行时,数据网格视图中出现DataError

本文关键字:视图 网格 DataError 数据网 数据 | 更新日期: 2023-09-27 17:58:46

我有一个奇怪的问题。我有来自XML文件的datagridview填充和在datagridview末尾添加新行的button

我有滚动条,所以我不能一次看到所有的行。当我添加新行时,如果我没有看到新创建的行,则一切正常。

行已经创建,我可以编辑单元格,一切都很好。但如果我向下滚动到最后,然后按下button,中就有DataError

 datagridview1.Rows[datagridview1.Rows.Count - 1].Cells[3].

这个专栏很特别。它是DataGridViewComboBoxColumn,当它没有值时我有DisplayStyle = Nothing。但是当我有xml中的值时,我会生成style-ComboBox我对此没有意见

这是添加行的代码:

private void AddNewBlock_Click(object sender, EventArgs e)
{
  datagridview1.Rows.Add(val[0], 0, val[1], new DataGridViewComboBoxCell(), 4, 0);
  datagridview1.Rows[datagridview1.Rows.Count - 1].Cells[3].ReadOnly = false;
  (datagridview1.Rows[datagridview1.Rows.Count - 1].Cells[3] as DataGridViewComboBoxCell).DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
  AddNewDataGridvRow(datagridview1.Rows.Count - 1, 3, true);
}

方法"AddNewDataGridvRow"包含:

private void AddNewDataGridvRow(int row, int col, bool isNewBBlock = false)
    {
       AddNewNumber newNum = new AddNewNumber();   // this shows form with one textbox 
       // in it you type the value. Nothing special.
       DataGridViewComboBoxCell cb = new DataGridViewComboBoxCell();
       if (newNum.ShowDialog() == DialogResult.OK)
        {
            cb = new DataGridViewComboBoxCell();
            cb = (DataGridViewComboBoxCell)datagridview1.Rows[row].Cells[col];
            byte num= newNum.Num;
            cb.ValueMember = num.ToString();
            cb.Items.Add(num.ToString());
            datagridview1.Rows[row].Cells[col].Value = ver.ToString();
        }

是我做错了什么吗?当我调试它时,我在按下这行中的f10后得到错误if (newNum.ShowDialog() == DialogResult.OK)

表单代码:

public partial class AddNewNumber : Form
{
    public byte Num= 0;
    public AddNewNumber ()
    {
        InitializeComponent();
    }
    private void btnOk_Click(object sender, EventArgs e)
    {
        try
        {
            Num= Convert.ToByte(tbNum.Text);
            this.Close();
        }
        catch
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        }
    }
}

当您看到行时,数据网格视图中出现DataError

打开对话框时试试这个:

        newNum.ShowDialog()
        if (newNum.DialogResult == DialogResult.OK)
        {
        }

我想DialogResult.OK不能与.showDialog()相比。

您必须将窗体的DialogResult属性与值DialogResult.OK进行比较,而不是与.showDialog()进行比较。

我设法修复了它,感谢您的帮助。错误来自线路

datagridview1.Rows.Add(val[0], 0, val[1], new DataGridViewComboBoxCell(), 4, 0); 

我把它改成

datagridview1.Rows.Add(val[0], 0, val[1], null, 4, 0); 

它奏效了。