错误“当控件受数据绑定时,无法以编程方式将行添加到 datagridview 的行集合中" [英] Error "Rows cannot be programatically added to datagridview's row collection when the control is data-bound"

查看:29
本文介绍了错误“当控件受数据绑定时,无法以编程方式将行添加到 datagridview 的行集合中"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 DataGridView 和几个 TextBox 和组合框控件.当我在文本框控件中输入数据并单击添加按钮时,这些值将添加到 DataGridView 视图以供用户查看,并单击保存按钮将值保存在 DB 中.

I have a DataGridView and few TextBox and combo box controls. when i enter data in textbox controls and click on add button the values are added to DataGridViewview for user view and on clicking save button the values gets saved in DB.

问题是我有一个 TextBox(Invoice_No),在这个 TextBoxleave 事件中,我编写了代码来从 DB 获取数据到数据网格视图.现在我无法通过在 TextBox 控件中输入值来向该网格添加额外的行.它给出了以下错误

The problem is that I have a TextBox(Invoice_No), On this TextBoxleave event i have written code to fetch data from DB to data grid view. Now i am not able to add additional row to this grid by entering values in TextBoxcontrols. It gives the below error

当控件为数据绑定时,无法以编程方式将行添加到 datagridview 的行集合中

Rows cannot be programatically added to datagridview's row collection when the control is data-bound

private void textBox1_Leave(object sender, EventArgs e)
{
    MySqlConnection connection = new MySqlConnection(myconnectionstring);

    string getinvdtlcnt = "SELECT COUNT(*) FROM invoice_detail WHERE invoice_no = '" + textBox1.Text + "'";
    MySqlCommand cmd = new MySqlCommand(getinvdtlcnt, connection);
    connection.Open();
    var ObjResult = cmd.ExecuteScalar();
    int Result = Convert.ToInt32(ObjResult);
    connection.Close();
    if (Result > 0)
    {                dataGridView1.Columns.Clear();
            string getinvdtl = "SELECT invoice_no Invoice_No,invoice_line_no Invoice_Line_No,barcode Barcode,product_name Product_Name,description Description,vendor_name Vendor_Name,unit_qty Unit_Qty,UOM,total_qty Total_Qty,single_qty_cost Single_Qty_Cost,single_qty_retail Single_Qty_Retail,cost Cost,retail Retail,discount Discount,amount Amount FROM invoice_detail WHERE invoice_no = '" + textBox1.Text + "'";
            connection.Open();
            MySqlDataAdapter adapter = new MySqlDataAdapter(getinvdtl, connection);

            MySqlCommandBuilder cmdbuilder = new MySqlCommandBuilder(adapter);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            dataGridView1.DataSource = dt;

            connection.Close();
            int r;
            bool isRvalid = int.TryParse(Result.ToString(),out r);
            textBox2.Text = (Result + 1).ToString();
            textBox3.Focus();
    }
}

private void BtnAdd_Click(object sender, EventArgs e)
{
    if (textBox1.Text == "" | textBox3.Text == "" | textBox4.Text == "" | comboBox1.SelectedIndex == 0 | textBox5.Text == "" | textBox6.Text == "" | textBox7.Text == "" | textBox8.Text == "" | textBox9.Text == "" | textBox10.Text == "" | textBox11.Text == "" | textBox12.Text == "")
    {
        MessageBox.Show("Values Should not Be empty!");
        textBox3.Focus();
    }
    else
    {                
        dataGridView1.Rows.Add(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, richTextBox1.Text, comboBox1.Text, textBox5.Text, comboBox2.Text, textBox6.Text, textBox7.Text, textBox8.Text, textBox9.Text, textBox10.Text, textBox11.Text, textBox12.Text);
    }
}

推荐答案

在您的数据源中添加行,然后将数据源设置为更新的数据表.喜欢:

Add row in your Datasource and then set the datasource to updated datatable. Like:

private void BtnAdd_Click(object sender, EventArgs e)
{
    if (textBox1.Text == "" | textBox3.Text == "" | textBox4.Text == ""  comboBox1.SelectedIndex == 0 | textBox5.Text == "" | textBox6.Text == "" | textBox7.Text == "" | textBox8.Text == "" | textBox9.Text == "" | textBox10.Text == "" | textBox11.Text == "" | textBox12.Text == "")
    {
        MessageBox.Show("Values Should not Be empty!");
        textBox3.Focus();
    }
    else
    {      
        DataTable dt = dataGridView1.DataSource as DataTable;  
        dt.Rows.Add(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, richTextBox1.Text, comboBox1.Text, textBox5.Text, comboBox2.Text, textBox6.Text, textBox7.Text, textBox8.Text, textBox9.Text, textBox10.Text, textBox11.Text, textBox12.Text);
        dataGridView1.DataSource = dt;
    }
}

这篇关于错误“当控件受数据绑定时,无法以编程方式将行添加到 datagridview 的行集合中"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆