2011-10-23 2 views
1

Я получил типизированный набор данных в своей форме. Использование BindingSource для перемещения по строкам, вставка и обновление записей.Получите идентификатор от типизированного DataSet

Все в порядке, но мне нужно ввести значение идентификатора записей для создания строки для моего поля GeneratedCode в моей таблице.

После получения этого значения я отправлю значение моему методу CodeGen() и сгенерирую строку и обновить поле этой строки CodeGen с этим значением.

Я использую Access db. Я знаю, что есть @@Identity вещь для доступа db. Но как я могу его использовать? Я не хочу использовать OleDbCommand или что-то в этом роде.

Как я могу это сделать?

string GenCode(int pCariId) 
    { 
     string myvalue; 
     int totalDigit = 7; 

     myvalue = "CR" + pCariId.ToString(); 
     for (int digit = myvalue.Length; digit <= totalDigit - 1; digit++) 
     { 
      myvalue = myvalue.Insert(2, "0"); 

     } 
     return myvalue; 
    } 

private void dataNavigator_ButtonClick(object sender, NavigatorButtonClickEventArgs e) 
    { 
     switch (e.Button.ButtonType) 
     { 
      case NavigatorButtonType.EndEdit: 
       try 
       { 

        this.Validate(); 

        if (KaydetFlags == 1) 
        { 
         this.bndCariKayit.EndEdit(); 

         datagate_muhasebeDataSet.TB_CARI.Rows[datagate_muhasebeDataSet.Tables["TB_CARI"].Rows.Count - 1]["INS_USR"] = 0; 
         datagate_muhasebeDataSet.TB_CARI.Rows[datagate_muhasebeDataSet.Tables["TB_CARI"].Rows.Count - 1]["INS_TRH"] = DateTime.Now; 
         XtraMessageBox.Show("Yeni Cari Kaydı Tamamlandı."); 
         KaydetFlags = 0; 

        } 
        else 
        { 

         DataRowView currentRow = (DataRowView)bndCariKayit.Current; 
         currentRow.Row["UPD_USR"] = "0"; 
         currentRow.Row["UPD_TRH"] = DateTime.Now; 
         XtraMessageBox.Show("Cari Kaydı Güncellendi."); 
         this.bndCariKayit.EndEdit(); 
        } 
        this.tB_CARITableAdapter.Update(datagate_muhasebeDataSet.TB_CARI); 


       } 
       catch (System.Exception ex) 
       { 
        XtraMessageBox.Show("Kayıt İşlemi Başarısız. Lütfen Tekrar Deneyiniz."); 
       } 
       break; 

ответ

0

Согласно documentation вы должны использовать RowUpdated метод вашего TableAdapter

private static void OnRowUpdated(
    object sender, OleDbRowUpdatedEventArgs e) 
{ 
    // Conditionally execute this code block on inserts only. 
    if (e.StatementType == StatementType.Insert) 
    { 
     OleDbCommand cmdNewID = new OleDbCommand("SELECT @@IDENTITY", 
      connection); 
     // Retrieve the Autonumber and store it in the CategoryID column. 
     e.Row["CategoryID"] = (int)cmdNewID.ExecuteScalar(); 
     e.Status = UpdateStatus.SkipCurrentRow; 
    } 
} 

Другой вариант, который я использую, чтобы создать Select запрос, который просто получает максимальное значение от вас id колонка:

SelectLastAddedId: 
SELECT MAX(id) FROM obmiar 

Просто установите режим выполнения запроса на scalar, и вы может ссылаться на него в вашем коде как int lastId =TableAdapter.SelectLastAddedId()

Смежные вопросы