2014-12-24 36 views
0

我有2個datagridviews包含一個表,給一些更多的空間插入文本。要添加,我不想顯示前2列,它們包含主鍵和外鍵,我已經找到一種方法來添加外鍵之前保存(主要是自動增量)。現在保存這個時,所有工作正常。但是,當我想要刪除一行......已刪除的行信息無法通過行訪問

就在數據集發回數據庫之前,我添加這樣的外鍵,現在我必須這樣做,否則adapt.Update()會拋出一個錯誤說該列不能爲空。

private void SaveAnalyseTable() 
    { 
     dgvAnalyse1.EndEdit(); 
     dgvAnalyse2.EndEdit(); 
     for (int x = 0; x < dgvAnalyse1.Rows.Count-1; x++) //add to table, -1 else it will try to insert Id into an empty row (out of index error) 
     { 
      if (x != dgvAnalyse1.Rows.Count) //if it is the last one, don't execute 
      { 
       if (string.IsNullOrEmpty(patientsDataset.Tables["Analyse"].Rows[x]["PatientId"].ToString()) && (patientsDataset.Tables["Analyse"].Rows[x].RowState != DataRowState.Deleted)) . 
       { 
        patientsDataset.Tables["Analyse"].Rows[x]["PatientId"] = currentPatient.PatientId; 
       } 
      } 

     } 
    } 

在上面的代碼,我不能這些外國號添加到datagridview的,因爲該列沒有 誤差在這裏上面的代碼拋出,當我試圖刪除一行像這樣:

private void btnAnalyseDelete_Click(object sender, EventArgs e) 
    { 
     foreach (DataGridViewRow item in dgvAnalyse1.SelectedRows) 
     { 
      dgvAnalyse1.Rows.RemoveAt(item.Index); 
      int index = item.Index; 
      if (index != -1) 
      { 
       patientsDataset.Tables["Analyse"].Rows[index].Delete(); 
      } 

     } 
     SaveAllData(); //even when saving the whole dataset to the database, still get the error 

    } 

所以:先保存,然後刪除不起作用,它立即拋出錯誤。 在保存之前刪除確實有效,它不能是同一個索引,所以它必須對我猜測的數據集中的行做些什麼。

編輯 - > updateDataSet - > SaveToDatabase - >刪除行 - >錯誤。

編輯 - > UpdateDataSet - > deleteRow - > updateDataSet - > SaveToDatabase - >罰款,除非相同指數

我敢肯定,保存數據時,它會重新填寫表格的數據集。

回答

2

當你調用SaveAnalyseTable你有一個測試,以避免PatientIDDataRowState.Deleted一排排用null或空值,但是你的邏輯應該考慮& &操作

短路評價的作用在你的情況, PatientID爲空或空的測試發生在DataRowState.Deleted狀態的測試之前,因此在刪除行的情況下也會執行該測試。運營商& &首先嚐試驗證表達式的第一部分(PatientID爲空或空),但檢查刪除僅在第一部分後發生。因此,每次都會發生第一次測試,此測試可能會嘗試訪問DataRowState.Deleted行。

你只需要扭轉你測試一行空或空

if (patientsDataset.Tables["Analyse"].Rows[x].RowState != DataRowState.Deleted && 
    string.IsNullOrEmpty(patientsDataset.Tables["Analyse"].Rows[x]["PatientId"].ToString()) 
+0

如此接近..感謝的順序! – CularBytes