我將DataSet中的一行數據改變(主鍵不變)﹐用GetChanges方法將改變的那一行存到另一個DataSet對象DataSetChanged中﹐然后調用DataSet.Merge(DataSetChanged,true),Dataset中出現兩行相同的數據﹐將true改成false也一樣﹐為什么?我沒有改變DataSetChanged中的數據。

解决方案 »

  1.   

    private void btnUpdate_Click(object sender, System.EventArgs e)
    {
    //獲取選中的行
    DataRow targetRow = dataTable.Rows[lbCustomers.SelectedIndex]; //編輯行
    targetRow.BeginEdit();
    targetRow["CompanyName"] = txtCustomerName.Text;
    targetRow.EndEdit(); //獲取已改變的所有行
    DataSet DataSetChanged = DataSet.GetChanges(DataRowState.Modified); //測試﹐以確保已修改的行無誤
    bool okayFlag = true;
    if (DataSetChanged.HasErrors)
    {
    okayFlag =false;
    string msg = "Error in row with customer ID "; //在已改變的DataSet中查看每個表
    foreach (DataTable theTable in DataSetChanged.Tables)
    {
    //如有錯﹐看是哪一行
    if (theTable.HasErrors)
    {
    //獲取有錯的行
    DataRow[] errorRows = theTable.GetErrors(); //遍歷錯誤并改正
    foreach (DataRow theRow in errorRows)
    {
    msg = msg + theRow["CustomerID"];
    }
    }
    }
    lblMessage.Text = msg;
    }
    //如無錯
    if (okayFlag)
    {
    //將改變與原DataSet合并
    DataSet.Merge(DataSetChanged,false);

    //更新數據庫
    sqlDataAdapter1.Update(DataSet,"Customers");

    //接受變化﹐并重新生成列表框
    DataSet.AcceptChanges();
    PopulateLB();
    }
    else    //如果有錯﹐拒絕改變
    DataSet.RejectChanges();
    }