错误“当控件受数据绑定时,无法以编程方式将行添加到 datagridview 的行集合中" [英] Error "Rows cannot be programatically added to datagridview's row collection when the control is data-bound"
问题描述
我有一个 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 DataGridView
view for user view and on clicking save button the values gets saved in DB.
问题是我有一个 TextBox
(Invoice_No),在这个 TextBox
leave 事件中,我编写了代码来从 DB 获取数据到数据网格视图.现在我无法通过在 TextBox
控件中输入值来向该网格添加额外的行.它给出了以下错误
The problem is that I have a TextBox
(Invoice_No), On this TextBox
leave 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 TextBox
controls. 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屋!