2012-04-14 33 views
1

我有一個數據網格的表單,它由來自sqlserver數據庫的數據填充。 datagrid填充很好,但我無法將用戶所做的更改回發到sql數據庫中的表中。我的表格代碼如下:SqlDataAdapter.Update或SqlCommandBuilder不能正常工作

public partial class frmTimesheet : Form 
{ 
    private DataTable tableTS = new DataTable(); 
    private SqlDataAdapter adapter = new SqlDataAdapter(); 
    private int currentTSID = 0; 

    public frmTimesheet() 
    { 
     InitializeComponent(); 
    } 

    private void frmTimesheet_Load(object sender, EventArgs e) 
    { 
     string strUser = cUser.currentUser;    
     cMyDate cD = new cMyDate(DateTime.Now.ToString()); 
     DateTime date = cD.GetDate(); 
     txtDate.Text = date.ToString(); 
     cboTSUser.DataSource = cUser.GetListOfUsers("active"); 
     cboTSUser.DisplayMember = "UserID"; 
     cboTSUser.Text = strUser; 
     CheckForTimeSheet(); 
     PopulateTimeSheet(); 
    } 

    private void CheckForTimeSheet() 
    { 
     string strUser = cboTSUser.Text; 
     cMyDate cD = new cMyDate(txtDate.Text); 
     DateTime date = cD.GetDate(); 
     int newTSID = cTimesheet.TimeSheetExists(strUser, date); 
     if (newTSID != this.currentTSID) 
     { 
      tableTS.Clear(); 
      if (newTSID == 0) 
      { 
       MessageBox.Show("Create TimeSheet"); 
      } 
      else 
      { 
       this.currentTSID = newTSID; 
      } 
     } 
    } 

    private void PopulateTimeSheet() 
    { 
     try 
     { 
      string sqlText = "SELECT EntryID, CaseNo, ChargeCode, StartTime, FinishTime, Units " + 
          "FROM tblTimesheetEntries " + 
          "WHERE TSID = " + this.currentTSID + ";"; 
      SqlConnection linkToDB = new SqlConnection(cConnectionString.BuildConnectionString()); 
      SqlCommand sqlCom = new SqlCommand(sqlText, linkToDB); 
      SqlDataAdapter adapter = new SqlDataAdapter(sqlCom); 
      adapter.SelectCommand = sqlCom; 
      SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
      adapter.Fill(tableTS); 
      dataTimesheet.DataSource = tableTS;     
     } 
     catch (Exception eX) 
     { 
      string eM = "Error Populating Timesheet"; 
      cError err = new cError(eX, eM); 
      MessageBox.Show(eM + Environment.NewLine + eX.Message); 
     }   
    } 

    private void txtDate_Leave(object sender, EventArgs e) 
    { 
     CheckForTimeSheet(); 
     PopulateTimeSheet();    
    } 

    private void cboTSUser_DropDownClosed(object sender, EventArgs e) 
    { 
     CheckForTimeSheet(); 
     PopulateTimeSheet(); 
    } 

    private void dataTimesheet_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     try 
     { 
      adapter.Update(tableTS); 
     } 
     catch (Exception eX) 
     { 
      string eM = "Error on frmTimesheet, dataTimesheet_CellValueChanged"; 
      cError err = new cError(eX, eM); 
      MessageBox.Show(eM + Environment.NewLine + eX.Message); 
     } 
    } 
} 

沒有發生異常,當我通過簽發步驟似乎是與不建的INSERT/UPDATE/DELETE根據我GIEN SELECT命令命令SqlCommandBuilder。

任何人都可以看到我做錯了什麼?

我錯過了什麼?

回答

3

您需要設置UpdateCommand而不是SelectCommand上更新:

SqlDataAdapter adapter = new SqlDataAdapter(); 
SqlCommandBuilder sqlBld = new SqlCommandBuilder(adapter) 
adapter.UpdateCommand = sqlBld.GetUpdateCommand() ;