如何使用bindingSource将datarow选定的对象属性读入另一个Windows窗体

时间:2015-05-25 22:08:30

标签: c# winforms datagridview bindingsource

嗯,这是我的问题。我已经有了Form1和datagridview,我想在Form2上使用bindingSource将所选对象的值从datagrid传递到Form2到textBoxName和textBoxQuantity。 这是照片(对不起,但由于限制10分钟,我无法直接放置它们) http://i58.tinypic.com/hwy6g0.jpg

http://i60.tinypic.com/20fdt14.jpg

到目前为止,我已经使用方法ReadAllProducts()

创建了类Product和自定义Collection ProductCollection
class ProductsCollection : List<Products>
{

    public ProductsCollection ReadAllProducts()
    {
        Products product = null;
        ProductsCollection pCollection = new ProductsCollection();
        MySqlConnection cnn = new MySqlConnection(Konekcija.cnndbpos);
        MySqlCommand cmd = new MySqlCommand("SELECT *FROM products", cnn);

        try
        {
            cnn.Open();
            MySqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                product = new Products();
                product.Id = Int32.Parse(dr[0].ToString());
                product.Name = dr[1].ToString();
                product.Quantity = Int32.Parse(dr[2].ToString());

                pCollection.Add(product);

            }
            cnn.Close();
        }
        catch (Exception xcp)
        {
            MessageBox.Show(xcp.Message);
        }
        return pCollection;

    }

我使用bindingSource将集合从设计器绑定到dataGridview。

private void Form1_Load(object sender, EventArgs e)
    {
        ProductsCollection pc = new ProductsCollection();
        bindingSource1.DataSource = pc.ReadAllProducts();

    }

我想使用bindingSource在form2上做一些确切的事情。 到目前为止,我已完成此操作,按钮编辑,form1。

Products p = new Products();
Products pCurrent = (Products)dataGridView1.CurrentRow.DataBoundItem;

if (dataGridView1.CurrentCell.RowIndex > -1)
{
    p.Id = pCurrent.Id;
    p.Name = pCurrent.Name;
    p.Quantity = pCurrent.Quantity;
}

Form2 f2 = new Form2();
f2.Show();

1 个答案:

答案 0 :(得分:1)

作为DanielVorph状态,您需要利用BindingSource对象的Current属性:

//This is from button edit in Form1
var prod = bindingSource1.Current as Products;
var frm2 = new Form2(prod);
frm2.Show();

下一步是在Form2中创建一个带有Products

类型参数的构造函数
public class Form2: Form {
    public Form2(Products product){
        bindingSource2.DataSource = product;          
    }
}

在Form2中,您必须删除另一个BindingSource并在设计时将其DataSource属性设置为Products类型,然后为textBoxName和textBoxQuantity设置数据绑定,以将其Text属性指向您刚刚为Form2创建的绑定源。以下是一些图片,因为它更好地说明了。

BindingSource configuration Form Controls Binding Configuration