没有关联关系的!
我只是将新添加的内容写到数据集,然后将数据集的内容合并到另外一个数据集(dataGrid的数据源)!
谢谢!

解决方案 »

  1.   

    一定是数据存储有问题,我原来也碰到过,如果第一次存不成功,再保存就有问题,表一定要有主键,下面是我保存数据的代码片断,供参考:
    //由于大量表是基于多表查询的结果,C#不支持自动保存,但软件实际上只修改了其中一个表的数据
    //其余表的数据只是显示用,因此,本软件中,另外打开待修改的表,从当前dataset中获取修改的数据,
    //并填入,然后自动保存一个表即可。
    public static bool SaveRecord(DataSet myDataSet,string strTableName,string strKeyField)
    {
    bool result=true;
    DataSet Xdataset;
    Xdataset=myDataSet.GetChanges(); //没有改变,自动返回
    if(Xdataset==null)
    return true; if(Xdataset!=null)
    {
    //添加必要的数据库变量
    DataSet tempDataSet;
    #if SQLDATABASE  //网络版
    SqlDataAdapter tempDataAdapter;
    SqlCommandBuilder tempCommandBuilder;
    #else            //单机版
    OleDbDataAdapter tempDataAdapter;
    OleDbCommandBuilder tempCommandBuilder;
    #endif tempDataSet=new DataSet();
    //从查询表中获取当前行数据
    DataRow row1=Xdataset.Tables[0].Rows[0],row2;

    try
    {
    #if SQLDATABASE
    tempDataAdapter=new SqlDataAdapter("select * from "+strTableName+
    " where "+strKeyField+"="+row1[strKeyField],MyTools.ConnectionString);
    tempCommandBuilder=new SqlCommandBuilder(tempDataAdapter);
    #else
    tempDataAdapter=new OleDbDataAdapter("select * from "+strTableName+
    " where "+strKeyField+"="+row1[strKeyField],MyTools.ConnectionString);
    tempCommandBuilder=new OleDbCommandBuilder(tempDataAdapter);
    #endif tempDataAdapter.Fill(tempDataSet,"temp"); //得到从数据库中直接获取的当前行
    if(tempDataSet.Tables["temp"].Rows.Count==0)//添加状态,增加一新行
    {
    row2=tempDataSet.Tables["temp"].NewRow();
    tempDataSet.Tables["temp"].Rows.Add(row2);
    //自动填写编号
    int num=MyTools.GetMaxNum(strTableName,strKeyField);
    foreach(DataRow r in myDataSet.Tables[strTableName].Rows)
    {
    Application.DoEvents();
    if(r[strKeyField].ToString().Trim()==row1[strKeyField].ToString().Trim())
    {
    r[strKeyField]=row1[strKeyField]=num.ToString();
    break;
    }
    }
    } row2=tempDataSet.Tables["temp"].Rows[0]; //逐一从查询表中将新数据更换到原表中
    for(int i=0;i<tempDataSet.Tables["temp"].Columns.Count;i++)
    {
    string strColumnName=tempDataSet.Tables["temp"].Columns[i].Caption.Trim();
    if(row1[strColumnName].ToString().Trim()=="")
    row1[strColumnName]=DBNull.Value;
    if(row2[strColumnName]!=row1[strColumnName])
    row2[strColumnName]=row1[strColumnName];
    } //保存到数据库中
    DataSet tempXDataSet=tempDataSet.GetChanges();
    tempDataAdapter.Update(tempXDataSet,"temp"); }
    catch(Exception ee)
    {
    MessageBox.Show(ee.Message);
    result=false;
    }

    }
    return result;
    }