如何使用 bindingSource 将数据行选定的对象属性读入另一个 Windows 表单
How to read datarow selected object properties into another Windows Form using bindingSource
好吧,这是我的problem.I上面有 Form1 和 datagridview,我想使用 Form2 上的 bindingSource 将选定对象的值从 datagrid 传递到 Form2 到 textBoxName 和 textBoxQuantity。
这是图片(抱歉,由于10分钟的积分限制,我不能直接放)
http://i58.tinypic.com/hwy6g0.jpg
http://i60.tinypic.com/20fdt14.jpg
到目前为止,我已经制作了 class 个产品,并使用方法 ReadAllProducts()
自定义了集合 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 上做同样的事情。
到目前为止,我已经完成了,button edit , 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();
正如 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 创建的绑定源.这里有几张图片,因为它更好地说明了。
好吧,这是我的problem.I上面有 Form1 和 datagridview,我想使用 Form2 上的 bindingSource 将选定对象的值从 datagrid 传递到 Form2 到 textBoxName 和 textBoxQuantity。 这是图片(抱歉,由于10分钟的积分限制,我不能直接放) http://i58.tinypic.com/hwy6g0.jpg
http://i60.tinypic.com/20fdt14.jpg
到目前为止,我已经制作了 class 个产品,并使用方法 ReadAllProducts()
自定义了集合 ProductCollectionclass 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 上做同样的事情。 到目前为止,我已经完成了,button edit , 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();
正如 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 创建的绑定源.这里有几张图片,因为它更好地说明了。