当您看到行时,datagridview中的DataError

时间:2014-04-16 12:51:51

标签: c# winforms exception datagridview

我有奇怪的问题。我从datagridview文件XML填充,buttondatagridview的末尾添加新行。

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

行已创建,我可以编辑单元格,一切都很好。但是,如果我向下滚动到最后,然后按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;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

打开对话框时尝试此操作:

        newNum.ShowDialog()

        if (newNum.DialogResult == DialogResult.OK)
        {
        }
我无法将

DialogResult.OK.showDialog()进行比较。

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

答案 1 :(得分:0)

我设法解决它,谢谢你的帮助。该错误来自

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

我将其更改为

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

它有效。