|
|
|
Почему UserControl по любому вносит изменения в DataSet ??
|
|||
|---|---|---|---|
|
#18+
Ситуация стандартная: Есть форма, отображающая данные с какого-то датасета. Перед закрытием я вызываю BindingSource.EndEdit() и проверяю свойство DataSet.HasChanges() ... если изменения есть то сохраняем............... Пользователь открывает форму, просматривает и закрывает ничего не трогая!!! так вот если данные отображаются в стандартных контролах ( TextBox ) то датасет не обнаруживает изменений если же данные отображаются в контроле унаследованном от UserControl то датасет замечает изменения, хотя их нет.............. в чем секрет? вот набрал простое приложение, для иллюстрации проблемы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2009, 13:09 |
|
||
|
Почему UserControl по любому вносит изменения в DataSet ??
|
|||
|---|---|---|---|
|
#18+
Кому интересно, сам нашел ответ: Надо в UserControl-е обьявить событие: ValueChanged и вызывать его: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. правда почему это так происходит не очень понял, подсмотрел это на англоязычном сайте, а мой енглиш не гут:( english_site Most likely because there is no similar named Changed event, so the property value always get's persisted at Control.Validating. And a DataRow doesn't care if it's the same value, if a field is set then it's marked as changed. Add a changed event to your UserControl, eg: public event EventHandler FirstNameChanged; public string FirstName { get{return textBox1.Text;}set{textBox1.Text=value;} } // attach an eventhandler to textBox1.TextChanged private textBox1_OnTextChanged( object sender, EventArgs e ) { if ( FirstNameChanged!=null ) FirstNameChanged(this, EventArgs.Empty); } With a Changed event, it will persist the value at Control.Validating but only if the Changed event has fired before the Validating event. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2009, 13:44 |
|
||
|
Почему UserControl по любому вносит изменения в DataSet ??
|
|||
|---|---|---|---|
|
#18+
karapetyan_aправда почему это так происходит не очень понялПотому что в этом случае датабиндинг не может определить было ли изменено свойство и пишет его "всегда" в источник данных "на всякий случай". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2009, 10:18 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35757045&tid=1351985]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 330ms |

| 0 / 0 |
