各位达人,我遇到一个问题,我设置了一个datagridview,里面显示有从数据库中读取的数据,我想保存修改后的数据回数据库中!
我知道这要用到DATASET,但是现在我遇到一个问题,读取数据我用的是一个函数来实现的,然后,里面设置了与数据库表相关的DATASET,但是这个DATASET是局部变量,现在我要在另一个按钮函数中,实现保存,该怎么做呢?望各位达人不吝赐教!相关代码!
private void master_datagridview_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            String temp;
            temp = this.master_datagridview.CurrentRow.Cells[0].Value.ToString();            SqlConnection myConnetion = new SqlConnection("server=(local);database=医院体检系统;Trusted_Connection=yes");
            DataSet mydataset = new DataSet();
            mydataset.Locale = System.Globalization.CultureInfo.InvariantCulture;            
            String sqlString = "select 病人体检结果.项目明细名称,结果,标志,参考值,单位 from 病人体检结果,项目明细表,项目信息 where 病人体检结果.编号='"+this.id_label.Text+"' and 病人体检结果.项目明细编号=项目明细表.项目明细编号 and 项目明细表.项目编号=项目信息.项目编号 and 项目信息.项目名称='"
                              + temp + "'";
            SqlDataAdapter mydataAdapter = new SqlDataAdapter(sqlString, myConnetion);
            mydataAdapter.Fill(mydataset, "myset");
            this.detail_bindingsource.DataSource = mydataset;
            this.detail_bindingsource.DataMember = "myset";
            this.detail_datagridview.DataSource = this.detail_bindingsource;
            this.detail_datagridview.AllowUserToResizeColumns = true;
        }
这个函数是我要实现保存的函数!
        private void save_result_btn_Click(object sender, EventArgs e)
        {        }

解决方案 »

  1.   

    为什么用局部的DATASET,应该定义一个全局DATASET
      

  2.   

    在一个界面上其实是有两个datagridview ,是主从关系,问题中的datagridview是从datagridview。所以就设置的局部变量!
      

  3.   

    没看懂。你可以生成一个全局DATASET 动态添加表格保存到这个DATASET里,DATASET 就像个容器你可以添加多个表格
      

  4.   

    按照rubby2008达人的说法,我去实现了,但是运行的时候,这两条语句是不是有问题!我是菜鸟,才学习使用VS
    private void save_result_btn_Click(object sender, EventArgs e)
            {
                this.detail_dataAdapter.Update(this.detail_dataSet);
                MessageBox.Show("结果保存成功!");
            }
      

  5.   

    系统提示错误,说Update 无法找到tableMapping['table']或datatable"table"这个是怎么回事呢?怎么造成的呢?
      

  6.   

    应该是你添加表时没有MAPPING吧,多表添加到DATASET里要MAPPING
      

  7.   

    确实,这个dataset是几个表查询结果而来,那请问怎么添加呢?
    望不吝赐教
      

  8.   

    给你个例子,MSDN上可以查到解释       
         this._adapter = new System.Data.SqlClient.SqlDataAdapter();
                System.Data.Common.DataTableMapping tableMapping = new System.Data.Common.DataTableMapping();
                tableMapping.SourceTable = "Table";
                tableMapping.DataSetTable = "Order Details";
                tableMapping.ColumnMappings.Add("OrderID", "OrderID");
                tableMapping.ColumnMappings.Add("ProductID", "ProductID");
                tableMapping.ColumnMappings.Add("UnitPrice", "UnitPrice");
                tableMapping.ColumnMappings.Add("Quantity", "Quantity");
                tableMapping.ColumnMappings.Add("Discount", "Discount");
                this._adapter.TableMappings.Add(tableMapping);
      

  9.   


    呵呵,msdn上看了一下,没有看懂,如果不是很麻烦的话,你能帮我写一下吗?我的程序如下
    public partial class Edit_result : Form
        {
            
            public String id;
            DataSet detail_dataSet = new DataSet();
            SqlDataAdapter detail_dataAdapter;
            public Edit_result()
            {
                InitializeComponent();
            }        private void Edit_result_Load(object sender, EventArgs e)
            {
                this.id_label.Text = id;
                Get_masterData();
                this.master_datagridview.DataSource = this.master_bingdsource;
                this.master_datagridview.AllowUserToResizeColumns = true;
            }        private void label3_Click(object sender, EventArgs e)
            {        }
            private void Get_masterData()
            {
                try
                {
                    SqlConnection myConnection = new SqlConnection("server=(local);database=医院体检系统;Trusted_Connection=yes");
                    DataSet mydataSet = new DataSet();
                    mydataSet.Locale = System.Globalization.CultureInfo.InvariantCulture;                String sqlString = "select 项目名称 from 病人项目信息_视图 where 编号 = '" + this.id_label.Text + "'";                SqlDataAdapter myDataAdapter = new SqlDataAdapter(sqlString, myConnection);
                    myDataAdapter.Fill(mydataSet, "mytest");
                    this.master_bingdsource.DataSource = mydataSet;
                    this.master_bingdsource.DataMember = "mytest";
                }
                catch (SqlException ex)
                {
                    MessageBox.Show("插入数据错误! " + ex.Message.ToString());
                }
            }        private void master_datagridview_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                String temp;
                temp = this.master_datagridview.CurrentRow.Cells[0].Value.ToString();            SqlConnection myConnetion = new SqlConnection("server=(local);database=医院体检系统;Trusted_Connection=yes");
                //DataSet mydataset = new DataSet();
                this.detail_dataSet.Clear();
                this.detail_dataSet.Locale = System.Globalization.CultureInfo.InvariantCulture;            
                String sqlString = "select 病人体检结果.项目明细名称,结果,标志,参考值,单位 from 病人体检结果,项目明细表,项目信息 where 病人体检结果.编号='"+this.id_label.Text+"' and 病人体检结果.项目明细编号=项目明细表.项目明细编号 and 项目明细表.项目编号=项目信息.项目编号 and 项目信息.项目名称='"
                                  + temp + "'";
                this.detail_dataAdapter = new SqlDataAdapter(sqlString, myConnetion);
                this.detail_dataAdapter.Fill(this.detail_dataSet, "myset");
                this.detail_bindingsource.DataSource = this.detail_dataSet;
                this.detail_bindingsource.DataMember = "myset";
                this.detail_datagridview.DataSource = this.detail_bindingsource;
                this.detail_datagridview.AllowUserToResizeColumns = true;
            }        private void save_result_btn_Click(object sender, EventArgs e)
            {
                this.detail_dataAdapter.Update(this.detail_dataSet);
                MessageBox.Show("结果保存成功!");
            }
        }