|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Тема такая: Есть класс элемента коллекции class Item{ public int ID { get; set; } public int ... } Есть некоторая коллекция этих элементов List<Item> list= ... Есть BindingSource, который эту коллекцию подает на DataGridView. Можно ли использовать свойство фильтр у BindingSource? Например, чтобы грид отобразил только строчку с Item.ID=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 08:42 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
ЧитательX, Можно ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 09:12 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Даже боюсь спросить КАК? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 10:24 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
ЧитательXДаже боюсь спросить КАК? Реализовать в коллекции IBindingListView ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 12:20 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
А в чем проблема? Что вы попробовали и что не получилось? Синтаксис того, что можно писать в качестве значения для Filter, можно посмотреть здесь Чтобы использовать фильтр, нужно, чтобы источник данных поддерживал интерфейс IBindingListView . DataTable этот интерфейс поддерживает. Других коллекций, поддерживающих этот интерфейс, я не нашел. Так что либо используйте DataTable в качестве DataSource, либо делайте свой списочный класс с поддержкой IBindingListView (тяжело и нет смысла), либо фильтруйте коллекцию через LINQ и передавайте отфильтрованые значения в DataSource PS Я с этим не работал, и затратил на поиск информации 5 минут. Что мешало это сделать вам? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 12:26 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Arm79Чтобы использовать фильтр, нужно, чтобы источник данных поддерживал интерфейс IBindingListView . DataTable этот интерфейс поддерживает. Других коллекций, поддерживающих этот интерфейс, я не нашел. Тут ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 13:26 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Алексей КArm79Чтобы использовать фильтр, нужно, чтобы источник данных поддерживал интерфейс IBindingListView . DataTable этот интерфейс поддерживает. Других коллекций, поддерживающих этот интерфейс, я не нашел. Тут Спасибо! Я имел ввиду нативные средства, но что в BLT это есть - не знал. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 13:42 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Заостряю акцент на том, что нет DataTable. Есть список List<Item> list= new List<Item>() item= new Item(){ID=1, .....} list.Add(item); item= new Item(){ID=2, .....} list.Add(item); ..... BindSrc.DataSource=list; Grid.DataSource=BindSrc; Например, нужно спрятать в гриде все строчки кроме item.ID=1 BindSrc.Filter="Что тут???"; Здесь нет DataRow. Тут есть элемент рукодельного класса Item. Как написать текст в фильтре, чтобы указать на свойство Item.ID?? Может быть у BindingSource можно перекрыть какой-нибудь метод, который отвечает за перебор содержимого? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 13:55 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Насчет IBindingListView - посмотрел, но пока не "въехал". Может быть здесь есть решение. Если подскажете на моем примере как это "приготовить" - скажу огромное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 13:59 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
ЧитательXЗаостряю акцент на том, что нет DataTable. Есть список List<Item> list= new List<Item>() item= new Item(){ID=1, .....} list.Add(item); item= new Item(){ID=2, .....} list.Add(item); ..... BindSrc.DataSource=list; Grid.DataSource=BindSrc; Например, нужно спрятать в гриде все строчки кроме item.ID=1 BindSrc.Filter="Что тут???"; Здесь нет DataRow. Тут есть элемент рукодельного класса Item. Как написать текст в фильтре, чтобы указать на свойство Item.ID?? Может быть у BindingSource можно перекрыть какой-нибудь метод, который отвечает за перебор содержимого? BindSrc.DataSource=list.Where(l => l.ID = 1).ToList() ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 14:23 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Arm79 BindSrc.DataSource=list.Where(l => l.ID = 1).ToList() По сути это каждый раз подмена источника данных. Я именно так и выкрутился, используя Linq для получения нового нужного набора. Но, хотелось чтобы DataSource оставался неизменным, управление отображением бы шло через манипуляции с BindSrc.Filter. Когда источником данных является DataTable, то подменяя текстовое выражение фильтра очень легко ужимать отображаемый список до его подмножества. При этом изображения грида не слишком "дергается". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 14:38 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
ЧитательXArm79BindSrc.DataSource=list.Where(l => l.ID = 1).ToList() По сути это каждый раз подмена источника данных. Я именно так и выкрутился, используя Linq для получения нового нужного набора. Но, хотелось чтобы DataSource оставался неизменным, управление отображением бы шло через манипуляции с BindSrc.Filter. Когда источником данных является DataTable, то подменяя текстовое выражение фильтра очень легко ужимать отображаемый список до его подмножества. При этом изображения грида не слишком "дергается". Не вижу в этом особой трагедии. К тому же Алексей помог - дал ссылку на коллекцию с поддержкой нужного интерфейса. Качайте BLTookit, и используйте не List<T>, а EditableList<T> ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2015, 15:09 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Спасибо за подсказки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2015, 13:09 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Me.dd03mBindingSource.Filter = "FIELDNAME LIKE '%" + textbox.Text + "%' or DDTEXT LIKE '%" + textbox.Text + "%'" FIELDNAME, DDTEXT - название столбцов У меня в свою очередь вопрос. Плизз помоги понять как добавлять и удалять записи. Как и у тебя биндинг содержит List. Данные редактируются но удаляться и добавляться через context.SaveChanges() не хотят. Вот тут http://www.codeproject.com/Articles/221931/Entity-Framework-in-WinForms вычитал что нужно использовать EntityDataSource потому как List с минимальной функциональностью If you run the code, however, you will notice some serious limitations: you can’t sort or filter the data, you can’t add or remove items from the list, and of course you don’t get to customize the grid columns at design time using the grid’s column editor. These limitations are due to the fact that the list used as a data source is simply a snapshot of the data. So although the objects in the list are “live”, the list itself is not. And the IBindingList that WinForms creates automatically for you in this case provides only minimal functionality. EntityDataSource добавить по какой то загадочной причине не получается... он серый. Можно конечно отлавливать в событиях UserAdded и UserDeleted строки и удалять их из контекста... подскажите плизз как правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 01:43 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
не ужеле не кому помочь? задачка по сути тривиальная :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 17:47 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Понимаю что желающих помочь полно, но из того, что написано не понятно в чем проблема. Ниже то, что имею в коде. Надеюсь это поможет указать на мои ошибки (с EF и List только начал разбираться). Данные в датагриде отображаются, но как их сохранить не пойму ( Add, Update и Delete в репозитории не использую. Хотелось бы добавлять, редактировать, удалять не отлавливая события датагрида, а просто в конце по нажатию кнопки сохранять все сделанные изменения. В примере ниже вообще не понять как сохранить данные Когда в репозитории вместо Private context As BindingList(Of Owners) было Private context As DataLayer то, получалось сохранить только Update. Добавить и Удалить не получалось. Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2015, 21:33 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
эх, вот ни кто не помог ( опять день убил на решение... Коротко вот это работает. Me.OwnersBindingSource.DataSource = context.Owners.Local.ToBindingList ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2015, 16:59 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Убил день ? Это твои личные трудности ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2015, 00:29 |
|
BindingSource и фильтрация
|
|||
---|---|---|---|
#18+
Артем Gэх, вот ни кто не помог ( опять день убил на решение... Коротко вот это работает. Me.OwnersBindingSource. DataSource = context.Owners. Local.ToBindingList Вы разве не хотели фильтрации в изначальном посте, чтобы не дергать DataSource? А тут вы тупо подменяется DataSource один другим? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2015, 06:40 |
|
|
start [/forum/topic.php?fid=20&msg=38871860&tid=1401910]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
93ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 365ms |
total: | 565ms |
0 / 0 |