Winform中DataSet得到数据表以后绑定到DataGrid上,怎样在窗体中修改DataGrid值的时候同时修改DataSet中的值然后更新到数据库(DataGride的ReadOnly=false)

解决方案 »

  1.   

    如果你绑定的话应该直接就更新了Dataset了啊!
      

  2.   

    直接使用updata就可以更新了啊!
      

  3.   

    private void WinMain_Load(object sender, System.EventArgs e)
    {
    DataAccess da=new DataAccess();
             string sql="select ID,UserID,IdNum,RealName from Users";
    DataSet dtb=da.GetDataSet(sql);
    DataTable tb=dtb.Tables["tb"];
    dataGrid1.DataSource=tb;
    }public DataSet GetDataSet (string sql)
    {
    SqlConnection cn=new SqlConnection(DataAccess.ConnectionString);
    SqlDataAdapter dr=new SqlDataAdapter(sql,cn);
    DataSet da=new DataSet();
    try
    {
    dr.Fill(da,"tb");
    }
    catch (Exception ex)
    {
    throw new Exception(ex.ToString());
    }
    finally
    {
    cn.Close();
    cn.Dispose();
    dr.Dispose();
    }
    return da;
        }private void button1_Click(object sender, System.EventArgs e)
    {这里是确定按钮,不知道改怎么写把dataGrid1上已更改的数据提交到DataSet中,然后更新数据库,高手帮忙啊}
      

  4.   

    private void Form1_Load(object sender, System.EventArgs e)
    {
    try
    {
           string source=@"Integrated Security=SSPI;Persist   Security Info=False;Initial Catalog=northwind;Data Source=."; 
             string orders="select * from Orders";
    //string customers="select * from Customers";
    SqlConnection conn=new SqlConnection(source);
    sda=new SqlDataAdapter(orders,conn);
                                        //关键
    SqlCommandBuilder bld=new SqlCommandBuilder(sda);
    ds=new DataSet();
    sda.Fill(ds,"Orders");
             this.dataGrid1.SetDataBinding(ds,"Orders");

    }
    catch(SqlException sq)
    {
    MessageBox.Show(sq.Message);
    }
    catch(Exception se)
    {
    MessageBox.Show(se.Message);
    }

    } private void button1_Click(object sender, System.EventArgs e)
    {
    if(ds.HasChanges())
    {
    this.sda.Update(ds,ds.Tables[0].TableName);
    }
    }
    }
    已运行通过
      

  5.   

    to:Alan810(飞花落叶)private void button1_Click(object sender, System.EventArgs e)
    {
    if(ds.HasChanges())
    {
    this.sda.Update(ds,ds.Tables[0].TableName);
    }
    }
    }
    程序这段里ds,sda没有定义啊,引用不了,怎么半??
      

  6.   

    if(ds.HasChanges())
    {
    this.sda.Update(ds,ds.Tables[0].TableName);
    }
    }你看这两句就行了
      

  7.   

    这两句我明白,但是现在有一个逻辑先后的问题,DataGrid绑定了DataSet,DataGrid内容变化的时候DataSet是自动跟随变化么,另外,如果是自动跟随变化的我点击button1按钮时是不是需要重新定义一个新的DataSet用来填充变化后的DataGrid,如果不是的话,为什么总提示我ds和sda没有定义??
      

  8.   

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim ds1 As New Data.DataSet
            Dim ds2 As New Data.DataSet
            Dim ds3 As New Data.DataSet
            Dim ts As Data.SqlClient.SqlTransaction        Me.SqlConnection1.ConnectionString = ConnString//连接字符串,自己写一下。        ds1 = Nothing
            ds2 = Nothing
            ds3 = Nothing        ds1 = Me.MyToolbar1.DS.GetChanges(DataRowState.Added)
            ds2 = Me.MyToolbar1.DS.GetChanges(DataRowState.Deleted)
            ds3 = Me.MyToolbar1.DS.GetChanges(DataRowState.Modified)
            Try
                Me.SqlConnection1.Open()
                ts = Me.SqlConnection1.BeginTransaction(IsolationLevel.Serializable)
                Me.SqlInsertCommand1.Transaction = ts
                Me.SqlDeleteCommand1.Transaction = ts
                Me.SqlUpdateCommand1.Transaction = ts
                Me.SqlSelectCommand1.Transaction = ts
                If Not (ds1 Is Nothing) Then
                    'ds1.Tables("AA_User").Rows(0)("UserID") = Me.MyToolbar1.DS.Tables("AA_User").Rows.Count
                    'ds1.Tables("AA_User").Rows(0)("UserLB") = 1
                    ds1.Tables("AA_User").Rows(0)("sUserName") = Me.FlatTextBox1.Text.ToString()
                    ds1.Tables("AA_User").Rows(0)("sPassWord") = Me.FlatTextBox2.Text.ToString()
                    Me.SqlDataAdapter1.Update(ds1)
                End If            If Not (ds2 Is Nothing) Then
                    'ds2.Tables("AA_User").Rows(0)("sUserName") = Me.FlatTextBox1.Text.ToString()
                    'ds2.Tables("AA_User").Rows(0)("sPassWord") = Me.FlatTextBox2.Text.ToString()
                    Me.SqlDataAdapter1.Update(ds2)
                End If            If Not (ds3 Is Nothing) Then
                    ds3.Tables("AA_User").Rows(0)("sUserName") = Me.FlatTextBox1.Text.ToString()
                    ds3.Tables("AA_User").Rows(0)("sPassWord") = Me.FlatTextBox2.Text.ToString()
                    Me.SqlDataAdapter1.Update(ds3)
                End If
                ts.Commit()
            Catch ex As Exception
                ts.Rollback()
                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Finally
                ts.Dispose()
                Me.SqlConnection1.Close()
                mydb = Nothing
            End Try
        End Sub
      

  9.   

    SqlCommandBuilder bld=new SqlCommandBuilder(sda);最好不要用这个东西
      

  10.   

    http://www.cnblogs.com/jhtchina/articles/187024.html
    应该符合你的要求
      

  11.   

    SqlCommandBuilder bld=new SqlCommandBuilder(sda); 以及 DataSet ds定义为全局变量
      

  12.   

    SqlCommandBuilder bld=new SqlCommandBuilder(sda);最好不要用这个东西wxwx110(无敌大馒头):
    你平时用是怎么做的,
    能详解吗?学习!!!!!!!!!!!!!
      

  13.   

    简而言之就是采用SqlDataAdapter这个控件,SqlDataAdapter.Fill()来填充数据,修改时采用SqlDataAdapter.Updata()就行了,这个控件可以可视化编程,很方便.
      

  14.   

    mliu的方法是最简单有效的,当然你刚才的那段代码里没有定义SqlDataAdapter却是不行啊!你
      

  15.   

    简而言之就是采用SqlDataAdapter这个控件,SqlDataAdapter.Fill()来填充数据,修改时采用SqlDataAdapter.Updata()就行了,这个控件可以可视化编程,很方便.