Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Лучшая практика для динамически добавляемых классов Web.UI.ITemplate
У нас есть несколько шаблонов столбцов ASP.Net dataview, которые динамически добавляются в dataview в зависимости от Столбцов, выбранных пользователями.
Эти шаблонные ячейки должны обрабатывать пользовательские привязки данных:
public class CustomColumnTemplate:
ITemplate
{
public void InstantiateIn( Control container )
{
//create a new label
Label contentLabel = new Label();
//add a custom data binding
contentLabel.DataBinding +=
( sender, e ) =>
{
//do custom stuff at databind time
contentLabel.Text = //bound content
};
//add the label to the cell
container.Controls.Add( contentLabel );
}
}
...
myGridView.Columns.Add( new TemplateField
{
ItemTemplate = new CustomColumnTemplate(),
HeaderText = "Custom column"
} );
Во-первых, это кажется довольно грязным, но есть также проблема ресурсов. Label генерируется и не может быть удален в InstantiateIn , потому что тогда он не будет там для привязки данных.
Есть ли лучший шаблон для этих элементов управления?
Есть ли способ убедиться, что метка удалена после привязки данных и визуализации?
Я много работал с шаблонным контролем и не нашел лучшего решения.
Почему вы ссылаетесь на contentLable в обработчике событий?
Отправитель-это метка, которую вы можете бросить на метку и иметь ссылку на метку. Как и ниже.
//add a custom data binding
contentLabel.DataBinding +=
(object sender, EventArgs e ) =>
{
//do custom stuff at databind time
((Label)sender).Text = //bound content
};
Тогда вы сможете избавиться от ссылки на метку в InstantiateIn.
Пожалуйста, обратите внимание, что я не проверял это.
Одно из решений состоит в том , чтобы сделать ваш шаблон сам реализовать IDisposable, а затем утилизировать элементы управления в методе Dispose вашего шаблона. Конечно, это означает, что вам нужна какая-то коллекция, чтобы отслеживать созданные элементы управления. Вот один из способов сделать это:
public class CustomColumnTemplate :
ITemplate, IDisposable
{
private readonly ICollection<Control> labels = new List<Control>();
public void Dispose()
{
foreach (Control label in this.labels)
label.Dispose();
}
public void InstantiateIn(Control container)
{
//create a new label
Label contentLabel = new Label();
this.labels.Add(contentLabel);
...
//add the label to the cell
container.Controls.Add( contentLabel );
}
}
Теперь вы все еще сталкиваетесь с проблемой утилизации шаблона. Но, по крайней мере, ваш шаблон будет ответственным потребителем памяти, потому что при вызове Dispose в шаблоне все его метки будут удалены вместе с ним.
UPDATE
Эта ссылка на MSDN предполагает, что, возможно, для вашего шаблона нет необходимости реализовывать IDisposable , потому что элементы управления будут укоренены в дереве элементов управления страницы и автоматически удаляются платформой!