这其中涉及到两张表,一张是生产产品的供应商信息表,一张是产品信息表。主窗体查询的是供应商信息表,子窗体左边的datagridview查询的是产品信息表。当点击中间的“=>”按钮是,把左边选中的产品添加到右边。如果左边的产品没有设置单价,则弹出一个小窗体让用户设置价格(左边datagridview隐藏了“单价”列)。并保存,在右边就要显示出来。右边也可以移除产品到左边。最后点击“确定”按钮时,右边datagridview中的数据都要保存到主窗体中的datagridview控件中。
// <summary>
/// 保存用户选择的产品。
/// </summary>
public List<UMS_BASE_出品信息视图> L { get; set; }
public string SuppGuid { get; set; }
/// <summary>
/// 用户选中的产品。
/// </summary>
/// <param name="dt">DataTable对象</param>
public delegate void DtProductInfo(DataTable dt);
public DtProductInfo onProductInfo;
/// <summary>
/// 用来保存dgv_已选产品中的数据集。
/// </summary>
DataTable dt = new DataTable();
UMS_BASE_分页出品信息表 list = new UMS_BASE_分页出品信息表();
public FrmAddProduct()
{
InitializeComponent();
}
private void FrmAddProduct_Load(object sender, EventArgs e)
{
dgv_产品.AutoGenerateColumns = dgv_已选产品.AutoGenerateColumns = false;
string strGuid = "";
try
{
//根据出品类别查询出品Guid。
strGuid = cmb_产品性质.Text == "" ? "" : RestService.SelectGoodsCategory(BaseInfo.Storeguid).Where(n => n.类别 == cmb_产品性质.Text.Trim()).FirstOrDefault().GUID.ToString();
//产品信息。
list = RestService.SelectProducedInformationList(BaseInfo.Storeguid, 1, 22, "编码", "asc", strGuid, txt_产品.Text.Trim());
if (list != null && list.总行数 > 0)
{
dgv_产品.DataSource = list.ums_出品信息视图;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
dt.Columns.Add("品名", typeof(string));
dt.Columns.Add("进货价", typeof(string));
dt.Columns.Add("单价", typeof(string));
dt.Columns.Add("GUID", typeof(string));
}
/// <summary>
/// 根据产品名称或者编号查询产品信息。
/// </summary>
private void txt_产品_TextChanged(object sender, EventArgs e)
{
try
{
//根据出品类别查询出品Guid。
string strGuid = cmb_产品性质.Text == "" ? "" : RestService.SelectGoodsCategory(BaseInfo.Storeguid).Where(n => n.类别 == cmb_产品性质.Text.Trim()).FirstOrDefault().GUID.ToString();
UMS_BASE_分页出品信息表 list = RestService.SelectProducedInformationList(BaseInfo.Storeguid, 1, 22, "编码", "desc", strGuid, txt_产品.Text.Trim());
dgv_产品.DataSource = list;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btnChoose_Click(object sender, EventArgs e)
{
ChooseProduct();
}
/// <summary>
/// 选择左边的产品添加到右边。
/// </summary>
private void ChooseProduct()
{
if (dgv_产品.SelectedRows.Count > 0)
{
try
{
DataRow dr = dt.NewRow();
dr[0] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[0].Value.ToString();
dr[1] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[1].Value.ToString();
dr[2] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[2].Value.ToString();
dr[3] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells[3].Value.ToString();
dt.Rows.Add(dr);
dgv_已选产品.DataSource = dt;
foreach (UMS_BASE_出品信息视图 ub in list.ums_出品信息视图)
foreach (UMS_BASE_出品信息视图 ub in list.ums_出品信息视图)
{
if (ub.品名 == dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["品名"].Value.ToString())
{
string strGuid = "";
//如果价格为空,则让用户设置价格。
if (string.IsNullOrEmpty(dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["零售价"].Value.ToString()))
{
strGuid = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["GUID"].Value.ToString();
FrmSetPrice frmSetprice = new FrmSetPrice();
frmSetprice.ProGuid = strGuid;
if (frmSetprice.ShowDialog() == DialogResult.OK)
{
dr[1] = dgv_产品.Rows[dgv_产品.CurrentRow.Index].Cells["零售价"].Value.ToString();
}
}
break;
}
}
dgv_产品.DataSource = null;
dgv_产品.DataSource = list.ums_出品信息视图;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show("请选择添加的产品!");
}
}
private void dgv_产品_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
ChooseProduct();
}
private void dgv_已选产品_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
DeleteProduct();
}
private void btnDelete_Click(object sender, EventArgs e)
{
DeleteProduct();
}
/// <summary>
/// 把右边的数据移除到左边。
/// </summary>
private void DeleteProduct()
{
if (dgv_已选产品.SelectedRows.Count > 0)
{
try
{
dgv_已选产品.DataSource = dt;
UMS_BASE_出品信息视图 ub = new UMS_BASE_出品信息视图();
ub.品名 = dgv_已选产品.Rows[dgv_已选产品.CurrentRow.Index].Cells[0].Value.ToString();
list.ums_出品信息视图.Add(ub);
dgv_已选产品.Rows.Remove(dgv_已选产品.Rows[dgv_已选产品.CurrentRow.Index]);
dgv_产品.DataSource = null;
dgv_产品.DataSource = list.ums_出品信息视图;
dgv_产品.Refresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show("请选择要移除的产品!");
}
}
/// <summary>
/// 把要保存的产品添加到UC_SupplierFiles中。
/// </summary>
private void btnOk_Click(object sender, EventArgs e)
{
UC_SuppliersToGoods uc = new UC_SuppliersToGoods();
uc.Show();
if (onProductInfo != null)
{
onProductInfo(dt);
}
this.Close();
}
}
}
设置价格中的代码:
private void FrmSetPrice_Load(object sender, EventArgs e)
{
UMS_BASE_出品信息视图 u = RestService.SelectProducedInformation(Guid.Parse(ProGuid));
lbl_产品名称.Text = u.品名;
lbl_产品类别.Text = u.类别名称;
}
/// <summary>
/// 为产品设定价格。
/// </summary>
private void buttonX1_Click(object sender, EventArgs e)
{
UMS_Base_SuppliersGoodsInfo u = new UMS_Base_SuppliersGoodsInfo();
u.F_Price = decimal.Parse(txt_价格.Text.Trim());
try
{
RestService.InsertSuppliersGoodsInfo(u);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
this.DialogResult = DialogResult.OK;
}
代码中有一些问题,望各位指正。实现开始说的目的,也可以用其他的方法,在这里只是提供一个参考方法。