2013-09-28 3 views
0

У меня проблема, когда я не могу решить ее самостоятельно. И прежде чем я начну, важно сообщить вам, что вы знаете, чтоПолучить значение определенного столбца в datagridview до и после изменений

Эта проблема, которую я написал от начала до конца, хочу, чтобы вы, ребята, поняли, в чем моя проблема, тем, кто ленив читать это, пожалуйста, простите меня, я не прилагаю никакого кода здесь, только просто логика

Возможно, люди в этом форуме могли мне помочь. Но, я уже получил решение моей проблемы (но только логика, я не могу доказать это с помощью кода и не знаю, с чего начать)

Ну, вот мой случай:

I got a Quantity column in DataGridView, and i got a feature where user could edit the Quantity column in DataGridView and automatically updating the Quantity value in the Database.

Для примера (до сих пор в случае):

I have 1000 on Quantity in the Database, and i enter the value of 50 in the Quantity column in system and after that i add to the DataGridView by clicking a "OK" button, once clicked, the Quantity in the Database should update it Quantity become 950, from 1000. Because i use a formulavalueOfQuantityInDatabase - valueOfQuantityInSystem, it update properly and successful

Вот моя проблема идет:

Let's say i got a DataGridView with Quantity column and the value of it is 50(Это делают значение Количество в базе данных становятся 950)and let's say customer want to add his Quantity from 50 to 150, so i change the value of Quantity in DataGridView to 150 from 50, and when i click "OK" button, the Database should update based on the formulavalueOfQuantityInDatabase - valueOfQuantityInSystem, and the Quantity in Database should have 850 in Quantity value(Потому что 1000 - 150), but it is not as i expected, the Quantity value in database is 800(Потому что в первый раз я добавляю 50, поэтому количество в базе данных 950, затем я добавляю еще 150, а количество в базе данных - 800), so it is like first entered value + second entered value.

Вот что я хочу:

Whenever user edit the Quantity in DataGridView, it should goes to this formulavalueOfQuantityInDatabase - valueOfQuantityInSystem ------ (Таким образом, всякий раз, когда пользователь изменить значение Количество в DataGridView, скажем, это изменится на 150 из 50, Количество в базе данных должны признали это и минус с текущим значением Количество в DataGridView (150), а не более старый (50)

Вот мое решение, что я пришел с:

  1. Получить первое значение Количество в базе данных, прежде чем она была изменена (1000)

  2. Получить сколько значение Количество, которое было добавлено от пользователя по формулеQuantity in DataGridView after changes - Quantity in DataGridView before changesи плюс с формулаQuantity in DataGridView after changes - Quantity in DataGridView before changes

Но я не знаю, как получить решение 1, ни 2. Может ли кто-нибудь мне помочь? Большое спасибо! Ваш ответ я так ценю!

ответ

2

Я предлагаю вам изменить дизайн, изменить способ обновления количества в базе данных. Я не знаю, каков источник данных вашего gridview. Если его список элементов, когда пользователь обновляет количество в сетке, не обновляет изменения в базе данных, а просто обновляет источник данных, может быть значением в списке элементов заказа. Количество должно обновляться только после того, как пользователь выполнит заказ и нажмите кнопку «Сохранить».

В этом подходе вам не нужно поддерживать какое-либо предыдущее количество добавленного продукта, Пользователь может обновлять количество в любое время, вам не нужно его отслеживать, это сделает ваш код сложным. когда пользователь нажимает на сохранение, просто получайте текущее количество в сетке и просто обновляйте базу данных.

+0

Да, я уже мог получить текущее количество в сетке, но моя проблема в том, что я хочу обновить базу данных на основе количества Quantity в базе данных до того, как будут сделаны какие-либо изменения. И что вы подразумеваете под изменением? изменить только логику или изменить весь дизайн datagridview? – Kaoru

+0

Теперь, как вы обновляете количество в базе данных? Каждый раз, когда пользователь меняет количество в сетке, вы также обновляете количество в базе данных? – Kurubaran

+0

Да, когда пользователь добавляет данные в datagridview, он обновляет количество в базе данных и добавляет целые данные в таблицу и отображает их как datagridview. Когда пользователь редактирует данные в datagridview также (когда изменения были сделаны), количество в базе данных будет обновляться. – Kaoru

0

Существует множество методов для фиксации любых изменений в любых ячейках в DataGridView (DGV). Один из способов заключается в использовании двух событий DGV:

  1. CellBeginEdit
  2. CellEndEdit

Вот трюк ...

вы можете объявить два частных поля (пусть, _oldValue & _newValue) в классе, где вы используете DGV для вычисления значений. Тогда подписка на 2-событий может быть следующим:

private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) 
{ 
    _oldValue = dataGridView[e.ColumnIndex, e.RowIndex].Value; 
} 


private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    _newValue = dataGridView[e.ColumnIndex, e.RowIndex].Value; 

    if (_newValue != _oldValue) 
    { 
     // YOUR LOGIC SHOULD START FROM HERE 
    } 
} 

Теперь я займусь вашей проблемы ...

Если вы хотите достичь ваше решение 1, то вы можете поместить вашу логику в приведенном выше чтобы сохранить значение базы данных ячейки в первый раз, когда она изменится.

Хотя решение 2 не достаточно ясно для меня, вы можете просто сделать следующее в вышеуказанном месте:

  • Сохранить значение базы данных
  • вычесть _newValue из стоимости базы данных
  • магазин его обратно к базе данных

Но вызывать базу данных каждый раз, когда изменения ячейки могут занять много времени. Поэтому вы должны искать любое быстрое решение.

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