如上图所示,我想实现的功能是:
当我点中上面的“药品详情”表中的某一药品时,再点击右边“增加用药”,便可将刚刚选中的信息插入到下面的“病人用药”表中,这该如何实现?
“药品详情”表和“病人用药”表都在同一数据库中。最好有C#代码。

解决方案 »

  1.   

    DataGridView.CellContentClick 事件
    DataGridView.CellClick 事件
      

  2.   

    界面如下  不知道是不是lz要的效果 另外说明一点 不清楚lz的业务需求 所在显示病人用药那一块 lz根据自己的业务自行修善
    代码如下 表结构什么的我就不放了 lz根据自己的表来编写 这是死方法 建议是绑定泛型集合 一行的数据是一个对象 对象可以绑到行的tag上 这样有利于进一步的操作using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;namespace My
    {
        public partial class Form4 : Form
        {
            public Form4()
            {
                InitializeComponent();
            }        private void Form4_Load(object sender, EventArgs e)
            {
                this.dgvMedicine.AutoGenerateColumns = false;
                string sql = "SELECT * FROM Medicine";
                using (SqlConnection con = DBHelper.Connection)
                {
                    //窗体加载时 加载病人用药的药品信息
                    this.dgvMedicine.DataSource = DBHelper.GetDataTable(sql, null);
                }
            }        private void btnAdd_Click(object sender, EventArgs e)
            {
                //判断是否有选中行 如果没有则提示
                if (this.dgvMedicine.SelectedRows == null)
                {
                    MessageBox.Show("请选择需要的药品");
                }
                else
                {
                    //获取前一个taPage上的卡号文本框
                    TextBox txtCard = tabPage1.Controls["txtCardNo"] as TextBox;
                    //获取前一个tabPage上的姓名文本框
                    TextBox txtName = tabPage1.Controls["txtName"] as TextBox;
                    //--------下面是对DataGridview的操作
                    //获取选中行的第一列的值(这里对应的是药品名称 下面的就不重复写了)
                    //也就是你要插入到另一张的表的一些你需要的值
                    string mName = this.dgvMedicine.SelectedRows[0].Cells[1].Value.ToString();
                    //获取药品规格的值
                    //再说一点 我不知道你的用量是从哪里来的 所以没在表里面设计
                    string mStandard = this.dgvMedicine.SelectedRows[0].Cells[2].Value.ToString();
                    //构建参数化sql语句
                    string sql = "INSERT INTO PatitentInfo VALUES(@card , @name , @mname , @mstandard)";                //实例化参数列表
                    SqlParameter[] pars = {
                                              new SqlParameter("@card" , txtCard.Text),
                                              new SqlParameter("@name" , txtName.Text),
                                              new SqlParameter("@mname" , mName),
                                              new SqlParameter("@mstandard" , mStandard)
                                          };
                    //执行插入表的sql语句
                    if (DBHelper.ExecuteCommand(sql, pars) > 0)
                    {
                        //如果插入成功 则获取这张表中的对应病人的信息
                        string sqlStr = "SELECT * FROM PatitentInfo";
                        //清空数据绑定 防止数据重复加载
                        this.dgvPatient.DataSource = null;
                        this.dgvPatient.AutoGenerateColumns = false;
                        this.dgvPatient.DataSource = DBHelper.GetDataTable(sqlStr, null);
                    }
                    else
                    {
                        //提示插入失败
                        MessageBox.Show("新增信息出错!");
                    }
                }        }
        }
    }