【问题标题】:DataError in datagridview when you see the row当您看到该行时,datagridview 中的 DataError
【发布时间】:2014-04-16 12:51:51
【问题描述】:

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

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

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

【问题讨论】:

  • 您的表单代码AddNewNumber 在哪里?表格好像不太好用。还有,你有什么错误信息吗?

标签: c# winforms exception datagridview


【解决方案1】:

打开对话框时试试这个:

        newNum.ShowDialog()

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

DialogResult.OK 无法与 .showDialog() 相提并论。

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

【讨论】:

  • 我只需要一个不大于 255 的数字。
  • 在调试模式下通过表单时发生了什么?使用 f11 而不是 f10。
  • 加载新表单时会发生 DataError。我确信该错误与该表单无关。我认为这是因为 ShowDialog()。
  • 编辑我的答案。尝试这个。 ShowDialog() 和 DialogResult.OK 不是同一个数据。
  • 我用 F11 完成了它,但在此之前创建空的 AddNewNumber_Load(object sender, EventArgs e) 函数,以便我可以在某处放置断点。在AddNewNumber_Load 方法之后,它转到datagridview1DataError 方法。
【解决方案2】:

感谢您的帮助,我设法解决了它。错误来自行

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

我改成

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

它奏效了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多