用一个SqlDataAdapter填充一个DataSet
用这个DataSet的DataTable创建一个DataView
把这个DataView显示在DataGridView上,然后在DataGridView上修改的东西能不能用
SqlCommandBuilder对象和SqlDataAdapter对象更新这个数据库里面的值。。我的意思是DataTable的值可以用SqlCommandBuilder对象和SqlDataAdapter对象更新这个数据库里面的值但是我现在放在DataView里面,更改了DataView的值,还想更新数据库,怎么做到?

解决方案 »

  1.   

    DataView当做DataGridView的数据源,更新DataGridView数据后,会更新数据到datatable中,你可以测试一下,
    public partial class Form1 : Form
        {
            DataTable dt = new DataTable();
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                using (SqlConnection con = new SqlConnection("server=.;user id=sa;pwd=111;database=test1"))
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand("select * from A", con);
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = cmd;
                    da.Fill(dt);
                }
                DataView dv = dt.DefaultView;            dataGridView1.DataSource = dv;
            }        private void UpdateData()
            {
                using (SqlConnection con = new SqlConnection("server=.;user id=sa;pwd=111;database=test1"))
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand("select * from A", con);
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = cmd;
                    SqlCommandBuilder cbr = new SqlCommandBuilder(da);
                    da.Update(dt);
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(dt.Rows[0][1].ToString());
            }        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                UpdateData();
            }
        }
      

  2.   

    LZ,有个概念可能你没有弄清楚:
    DataView 类 :表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。
    DataView 的一个主要功能是允许在 Windows 窗体和 Web 窗体上进行数据绑定。另外,可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。这就说明:DataView 如果数据库的视图概念,只是表的一个条件查询、排序的临时结果,而真正的数据源,实在DataTable里!DataTable任何变化,都会反应到DataView 。所以,要更新数据库,最终必须与DataTable打交到!你用1楼的办法,可以解决你的问题。
      

  3.   

    DataView 和 DataTable 的功能是有区别的,
    如果他们没有很大的区别,那也就没有必要弄两个类出来了。
      

  4.   


    我把dataView的值改变,再用DataAdapter的Update,能否联动改变?
      

  5.   

    “我把dataView的值改变,再用DataAdapter的Update,能否联动改变?”,对,是这样的,DbDataAdapter.Update 方法,里面的参数,你上MSDN看看。。
      

  6.   

    下面是个形象的说法:
    DataSet 是一个盒子 
    DataTable 是一个有数据的表格 
    DataView 是能看到的表格的样子 盒子里面可以放多个表格,每个表格有自己默认的名字和索引位置;同一个表格可以有多种样子。但是任何一个样子必须是属于某一个表格的;而任何一个表格也都是装在确定的盒子里的。也就是说,盒子是必须存在的,你可以直接指定表格或样子,也可以指定某个盒子里的某个表格。 至于使用上,就看需求了。需要外观的时候就操作DataView,要操作单独的行、列、格里的数据的时候就用就用DataTable,而DataSet只作为装载表格的容器用!DataView是建立在DataTable基础上的,DataView.Table 属性可以得到此DataView对应的那个DataTable。DataView的行叫DataRowView,可以从DataRowView直接通过 DataRowView.Row 属性得到此DataRowView对应的DataRow。