суббота, 31 октября 2009 г.

Making parameters optional in EntityDataSource where clause

Where="it.Customer.CustomerID=@CustomerID OR @CustomerID IS NULL"

понедельник, 26 октября 2009 г.

SQL WHILE Statement

SQL While sets a condition for the repeated execution of an SQL statement or statement block. The SQL statements are executed repeatedly as long as the specified condition is return TRUE. The WHILE loop can be controlled from inside the loop with the CONTINUE,BREAK and GOTO keywords.

BREAK statement will exit you from the currently processing WHILE loop.
GOTO statement will break out of all WHILE loops, no matter how many nested WHILE statements.
CONTINUE statement will skips executing the rest of the statements between the CONTINUE statement and the END statement of the current loop and starts executing at the first line of the current WHILE loop.

WHILE Syntax
WHILE Boolean_expression
{ Sql Statement Block }


Below is simple example of WHILE Statement
DECLARE @counter INT
SET @counter = 0
WHILE @counter <>
BEGIN
SET @counter = @counter + 1
PRINT 'The counter : ' + CAST(@counter AS CHAR)
END
Value :
The counter : 1
The counter : 2
The counter : 3
The counter : 4
The counter : 5


Below is example of WHILE Statement with CONTINUEand BREAK
- It show you the using of Continue and Break in WHILE Statement and the IF...ELSE Statement.
DECLARE @Counter INT
SET @Counter = 0
WHILE @Counter <>
BEGIN
SET @Counter = @Counter + 1
IF @Counter <>
PRINT 'The counter : ' + CAST(@Counter AS CHAR)
ELSE IF @Counter > 3 AND @Counter <>
BEGIN
CONTINUE
PRINT 'No Counter Here'
END
ELSE IF @Counter > 13 AND @Counter <>
BREAK
ELSE
PRINT 'The counter : ' + CAST(@Counter AS CHAR)
END
Value :
The counter : 1
The counter : 2
The counter : 3
The counter : 10
The counter : 11
The counter : 12
The counter : 13


Below is example of WHILE Statement with CONTINUE,BREAK and GOTO
- It show you the using of Continue, Break and Goto in WHILE Statement and the IF...ELSE Statement.

DECLARE @N1 INT
DECLARE @N2 INT
SET @N1 = 0
SET @N2 = 0
WHILE @N1 <>
BEGIN
SET @N1 = @N1 + 1
WHILE @N2 <>
BEGIN
SET @N2 = @N2 + 1
IF @N2 = 3 and @N1 = 1
GOTO BREAK_OUT
ELSE
PRINT 'Value N1 is ' + CAST(@N1 AS CHAR(1)) + ' Value N2 is ' + CAST(@N2 AS CHAR(1)) END
SET @N2 = 0
END
BREAK_OUT:
Value :
Value N1 is 1 Value N2 is 1
Value N1 is 1 Value N2 is 2

Пользовательский текст команды (EntityDataSource)

Свойство CommandText элемента управления EntityDataSource позволяет задать запрос, в котором используется пользовательское выражение Entity SQL. Подобно инструкции SELECT, выражение Entity SQL в свойстве CommandText создает необновляемую проекцию исходных данных.

После присвоения свойства CommandText элементу управления EntityDataSource выполнять операции обновления, вставки и удаления посредством этого элемента управления невозможно. В этом случае методы CanDelete, CanInsert и CanUpdate связанного элемента управления EntityDataSourceViewвозвращают значение false. http://msdn.microsoft.com/ru-ru/library/cc488556.aspx

Проекции данных (EntityDataSource)

Можно проектировать определенные свойства объектов, возвращаемых элементом управления EntityDataSource с использованием свойства Select. Свойство Select элемента управления EntityDataSource содержит строку, представляющую инструкцию SELECT запроса Entity SQL. Эта строка передается без изменений объекту ObjectQuery(T), который при выполнении возвращает данные элементу управления EntityDataSource. Строка, заданная в свойстве Select, имеет такой же формат, что и строка, передаваемая методу Select объекта ObjectQuery(T). Примеры использования предложения SELECT для определения проекции для запроса см. в разделе Практическое руководство. Выполнение запроса, возвращающего анонимный тип (Entity Framework). http://msdn.microsoft.com/ru-ru/library/cc488524.aspx

Фильтрация данных (EntityDataSource)

Свойство Where элемента управления EntityDataSource — это строка, представляющая предложение WHERE, которое является предикатом запроса Entity SQL. Эта строка передается без изменений объекту ObjectQuery(T), выполняемому службами объектов. Этот запрос является источником данных, которым управляет элемент управления EntityDataSource. Строка, заданная в свойстве Where, имеет такой же формат, что и строка, передаваемая методу Where объекта ObjectQuery(T). Пример применения предложения WHERE для фильтрации результатов запроса см. в разделе Практическое руководство. Фильтрация данных (Entity Framework). http://msdn.microsoft.com/ru-ru/library/cc488531.aspx

Horizontal list

Use display: inline; and list-style-type: none; to make a basic horizontal list.

пятница, 23 октября 2009 г.

Определяемые пользователем типы данных CLR в MS SQL Server 2005 и 2008

SQL Server позволяет создавать объекты базы данных, которые программируются по сборке, созданной в среде CLR платформы .NET Framework. Объекты базы данных, которые способны пользоваться преимуществами многофункциональной модели программирования, предоставляемыми средой CLR, содержат триггеры, хранимые процедуры, функции, статистические функции и типы. http://msdn.microsoft.com/ru-ru/library/ms131120.aspx

вторник, 20 октября 2009 г.

Как выбрать бесплатный svn хостинг?

Три дня назад я столкнулся с проблемой использования бесплатного svn хостинга в одном новом проекте, о котором вы услышите через пару месяцев. Отправной точной для своих поисков я выбрал сайт subversion и начал копать. Не буду вдаваться в подробности , а напишу всего лишь общие выводы и комментарии. Итак, от чего вам придётся отталкиваться при выборе данного вида хостинга.

  1. Тип проекта который вы собираетесь заливать в репозиторий : open source или commercial
  2. Количество человек, которые будут учавстовать в проекте, а следовательно и коммитить в репозиторий
  3. Объём дискового необходимого пространства
  4. Можно также рассматривать количество проетов которые вы собираетесь хостить под одним аккаутном, но в шаровых версиях на более чем один проект надеяться не приходиться
  5. Наличие ежедневных бекапов, а также поддержка SSL соединения
  6. Дополнительные инструменты, такие как wiki, time tracking и т.д. и т.п. имеються практически у каждого хостера в наличии, даже в урезаных пакетах.

Исходя из всего вышеперчисленного можно сказать, что основными «шаровыми» хостерами на просторах интернет являються следующие десять проектов:

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

На хостингах для open source проектов необходимо сразу же выбрать тип лиценизии под которой будет распространяться ваш код. В случае с SF — это BSD 2.0, Google — один из Apache License 2.0, Artistic License/GPLv2, GNU General Public License v2, GNU General Public License v3, GNU Lesser General Public License, MIT License, Mozilla Public License 1.1, New BSD License.

Ещё одиним сложным выбором будет делема: что для вас главнее backup + поддержка ssl или большое дисковое пространство и возможность доступа более чем двух юзеров.

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

Данная диаграмма позволит вам очень быстро выбрать самого подходящего хостера, в противном же случае вам придётся обрать своё внимание на коммерческие версии ...

Лично я остановил свой выбор на хостере Assembla, который предоставляет всем желающим 500 МБ дискового пространства, а также позволяет одновреммено работать с любым количеством проетов любому количеству пользователей.

Контроль версий в Visual Studio. Плагины VisualSVN и AnkhSVN



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

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

Систем контроля версий много, так же как и сред разработки. В этой статье речь пойдет об интеграции системы контроля версий Subversion со средой разработки Microsoft Visual Studio.

Subversion - лидер среди систем контроля версий. Она разрабатывается с 2000 года и призвана заменить CVS. К преимуществам Subverion относятся: поддержка атомарных транзакций, бесплатность, простота изменения структуры директорий, отсутствие ограничений на размеры репозитория, удобство работы с удаленными репозиториями, минимизация сетевого трафика и т. д.

Microsoft Visual Studio содержит встроенную возможность интеграции с системой контроля версий. Студия поддерживает интерфейс MSSCCI (Microsoft Source Code Control Interface), реализуя который, система контроля версий может встраиваться в IDE. MSSCCI является открытым интерфейсом и включен в Visual Studio SDK. VS2002 поддерживает MSSCCI 1.1, VS2003 - MSSCCI 1.2. В Visual Studio 2005/2008 реализована версия 1.3, поддерживающая возможности удаления и переименования файлов и асинхронные операции.

Существует масса программ, обеспечивающих интеграцию Visual Studio с Subversion через MSSCCI: PushOk SVN SCC (последователь небезызвестного PushOk CVS SCC), TamTam SVN SCC(неограниченный триальный период и цена менее 10 долларов), Unified SCC, Agent SVN и т. д. Преимущество у них одно - совместимые плагины MSSCCI могут работать не только с Visual Studio, но и с другими средами разработки, реализующими интерфейс MSSCCI. Например, Altova UModel 2009, PowerBuilder, Microsoft Access и т. д. Специальные MSSCCI-провайдеры позволяют интегрировать подобные плагины даже с Delphi и C++ Builder.

Типичный интерфейс MSSCCI-совместимого плагина
Типичный интерфейс MSSCCI-совместимого плагина (Unified SCC). Не слишком привычный для пользователей Subversion
К сожалению, для пользователей Subversion большинство подобных плагинов не удобны. Представьте себе: вы создаете новый проект и помещаете его под контроль версий вручную, с помощью того же TortoiseSVN. Открываете проект в студии и обнаруживаете, что совместимый плагин MSSCCI "не видит", что ваш проект уже находится под контролем версий. Проект нужно обязательно помещать под контроль версий исключительно средствами плагина. Это типичная ситуация. В контекстном меню не наблюдается привычных функций Subversion - Commit, Merge, Revert, Branch и т. п., зато есть какие-то Checkin, Get, Get last version. И наконец, функционал Subversion существенно превосходит возможности MSSCCI. Например, Subversion поддерживает атомарные транзакции, а MSSCCI - нет. Так что во многих случаях придется обходиться "обрезанным" функционалом Subversion.

Всех подобных недостатков лишена программа VisualSVN, представляющая собой полноценный плагин к Visual Studio, причем (не являющимся MSSCCI-совместимым) VisualSVN основан на популярном SVN-клиенте TortoiseSVN и интегрирует все возможности Subversion и TortoiseSVN в интерфейс студии в привычном и удобном для использования виде.

VisualSVN - не единственный подобный плагин. Есть еще бесплатная open source-разработка - AnkhSvn. Не так давно плагин был существенно переработан. Вышла его вторая версия, которая, хоть и является MSSCCI-совместимой, также лишена всех перечисленных недостатков.

Итак, рассмотрим возможности VisualSVN и AnkhSvn поподробнее.

VisualSVN 1.7.1.

Тем, кто привык к TortoiseSVN, интерфейс VisualSVN окажется знакомым. Это ведь тот же самый интерфейс.

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

Плагин VisualSVN добавляет в интерфейс студии несколько элементов: отдельный пункт в главном меню, панель инструментов, контекстное меню, окно Pending changes со списком всех внесенных в проект изменений.

Интерфейс VisualSVN
Интерфейс VisualSVN. Пункт в главном меню, панель инструментов, окно изменений, контекстное меню
VisualSVN предоставляет доступ ко всем функциям, доступным в TortoiseSVN. Взять проект из репозитория, добавить проект в репозиторий, выполнить обновление, слияние файлов, создать ветвь и т. д. - интеграция полная. Все необходимые функции всегда под рукой, в контекстном меню. Меню хорошо структурировано, пользоваться им удобно.

VisualSVN автоматизирует множество операций, избавляя разработчиков от рутинной работы. Репозитории создаются в стандартном виде с поддиректориями trunk, tags и branches. Файлы и директории, входящие в проект, добавляются в репозиторий автоматически. Директории obj и bin всегда игнорируются. Новые проекты, создаваемые в солюшене, добавляются в репозиторий автоматически. VisualSVN отслеживает внесение изменений в структуру проекта - переименование и перемещение файлов, операции Drag & Drop, Copy & Paste, Save as - и автоматически выполняет соответствующий набор команд Subversion.

Статус каждого файла и директории, входящих в проект, помечается иконкой. Общий статус проекта отражается в строке состояния. Измененные участки кода помечаются цветом прямо в редакторе студии. VisualSVN позволяет отменить изменения как для отдельного выбранного участка, так и для файла целиком.

Полный список измененных файлов можно просмотреть в отдельном окне Pending changes. В том случае, когда изменения в код вносятся с помощь средств автоматическогорефакторинга кода, возможность просмотреть список внесенных изменений может оказаться просто неоценимой.

На сайте разработчиков VisualSVN доступна еще одна крайне полезная программа - VisualSVN Server. Она позволяет организовать совместный доступ к репозиториям Subversion. В принципе это можно сделать средствами самой Subversion, установив и сконфигурировав Apache-сервер. Однако с VisualSVN Server процесс упрощается и убыстряется на порядок. Достаточно запустить программу установки - все необходимые компоненты будут установлены и настроены автоматически. На сайте разработчиков имеется деморолик, демонстрирующий процесс совместного использования VisualSVN Server и VisualSVN.

По сравнению со стандартными средствами Subversion, VisualSVN Server обеспечивает ряд дополнительных преимуществ. Он позволяет использовать аутентификацию через группы Active Directory, записывает информацию о подсоединениях в Windows Event Log, реализует графический интерфейс в виде стандартной консоли управления Windows и т. д. Программа полностью бесплатна. С ней можно работать не только через VisualSVN, но и через любой другой клиент Subversion.

AnkhSvn 2.0

AnkhSvn во многом схож по функциональности с VisualSVN. Однако есть пара важных отличий. Первое - AnkhSvn поддерживает MSSCCI 1.3, т. е. является пакетом SCC. Второе - AnkhSvn не использует TortoiseSVN. Весь графический интерфейс для работы с Subversion AnkhSvn реализует самостоятельно.

Интерфейс AnkhSvn
Интерфейс AnkhSvn. Панель инструментов, контекстное меню, окно со списком изменений
Несмотря на то что AnkhSvn является MSSCCI-совместимым, он без проблем работает с проектами, которые были помещены в репозиторий Subversion с помощью сторонних инструментов. AnkhSvn "подхватывает" такие проекты на лету, без необходимости выполнения каких-либо дополнительных манипуляций.

AnkhSvn добавляет в студию собственную панель инструментов, окно со списком измененных файлов, пункты контекстного меню, показывает статус файлов и директорий. AnkhSvn отслеживает изменения структуры проекта - переименование файлов, операции Save As и т. п. Новые проекты, добавляемые в солюшен, автоматически добавляются в репозиторий. Директории bin и obj исключаются автоматически.

Возможности AnkhSvn и VisualSVN, по большому счету, совпадают. AnkhSvn предоставляет доступ практически ко всей функциональности Subversion. Единственная функция, которую мне не удалось найти, - создание репозитория. Нет и поблочной отмены изменений. С другой стороны, в AnkhSvn есть дополнительный функционал. Например, окно Pending changes содержит средства разрешения конфликтов. В окно свойств файла добавлена категория Subversion, в которой показываются ревизия, путь к репозиторию, статус блокирования файла и т. п.

VisualSVN не дает возможности работать с файлами, не входящими в проект, - для этого предназначен TortoiseSVN. В AnkhSvn применяется другой подход. Никакого стороннего клиента Subversion не требуется. С файлами, не входящими в проект, можно работать средствами AnkhSvn, через окно Working Copy Explorer. Аналогично окно Repository Explorer в AnkhSvn позволяет работать с репозиторием.

Просмотр репозитория в AnkhSvn
Просмотр репозитория в AnkhSvn
Более подробно о возможностях плагина можно почитать в документации.

В AnkhSvn очень неплохой набор функциональности. К сожалению, плагин не слишком надежен в работе. Окно с сообщениями об ошибке появляется довольно часто, после чего плагин "отваливается" до следующей перезагрузки студии. В этом он существенно уступает программе VisualSVN, которая, наоборот, демонстрирует очень стабильную работу.

Версии

VisualSVN 1.7.1 - Visual Studio 2003/2005/2008, требуется TortoiseSVN.
AnkhSvn 2.0.6347 - Visual Studio 2005/2008.
AnkhSvn 1.0.4 - Visual Studio 2002/2003.

Выводы

Существует множество программ для интеграции функциональности Subversion в Microsoft Visual Studio. Плагины VisualSVN и AnkhSVN гораздо более удобны для работы с Subversion, чем большинство MSSCCI-совместимых плагинов. Оба плагина предоставляют полноценный доступ ко всей функциональности Subversion и автоматизируют множество рутинных операций.

Возможности плагинов по большей части совпадают. Однако между плагинами есть три ключевых отличия. Первое связано с интерфейсом. Интерфейс VisualSVN базируется на интерфейсе популярного SVN-клиента TortoiseSVN, а AnkhSvn реализует свой собственный графический интерфейс. Второе - со стоимостью. VisualSVN - это платная программа, а AnkhSvn - полностью бесплатен. Третье - с надежностью работы. VisualSVN работает очень стабильно, а AnkhSvn, к сожалению, пока не слишком надежен. Последнее очень досадно. Остается надеяться, что нестабильность AnkhSvn - проблема временная и разработчики с ней успешно справятся.


Ссылки по теме:

Автор статьи: Виктор Деревянко

понедельник, 19 октября 2009 г.

Creating Killer Animations in Code

In Silverlight and WPF, there are several ways you can create animations. One way that has been covered before on this site involves creating a storyboard and using Expression Blend to visually create your animation. This approach is great for majority of all animations you would ever want to create. There are exceptions where this solution doesn't work as well as you would like.

Animations that are more random or will have a certain degree of variability don't fit well inside the box defined by Storyboards. For example, here is an example of an animation where the circles move around a centerpoint with a random speed each time you refresh the page:

[ the circles...they are spinning! ]

Something similar to what you see above works best when created in code, and this tutorial will show you one way of going about doing that. http://www.kirupa.com/blend_silverlight/animations_code_pg1.htm

Populating a ModalPopupExtender Dynamically



In the following week Using DynamicPopulateExtender to Populate a Modal Popup Dynamically
I was asked to dynamically
populate a popup that is
created by a ModalPopupExtender.
The answer is simple. There are
two ways to that and in this post
I’ll show them both.

Building the Script Service

The first thing I did was to create a ScriptService. The service will
create dynamically the controls I want to populate the popup of
the ModalPopupExtender with. The following ScriptService will
write a div and a bold text to its GetData method callers:

/// 
/// Summary description for ExampleService
/// 
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]    
[ScriptService]
public class ExampleService : WebService
{
[WebMethod]
public string GetData(string contextKey)
{
StringBuilder sb = new StringBuilder();
using (StringWriter underlineWriter = new StringWriter(sb))
{
using (HtmlTextWriter writer = new HtmlTextWriter(underlineWriter))
{
HtmlGenericControl div = new HtmlGenericControl
{
ID = "div",
InnerText = "Some Div",
TagName = "div"
};                    
div.RenderControl(writer);
writer.Write("Data");
}
}
return sb.ToString();
}
}

I deliberately used RenderControl option and also a hard coded string
to show that you can write any control any way you want.

Building the Page – First Attempt

One option to use when we want to populate a ModalPopupExtender
dynamically is to use the DynamicPopulateExtender. This extender
helps us to dynamically populate target controls. You need to supply to
the extender the trigger for the population in the PopulateTriggerControlID,
the service that will help you to populate the control (in my example – the
ExampleService) and the TargetControlID. The following code shows a
DynamicPopulateExtender with it’s relevant properties:

<cc1:DynamicPopulateExtender ID="dpe" runat="server" TargetControlID="panelInfo"
PopulateTriggerControlID="btnDummy" ServicePath="ExampleService.asmx"
ServiceMethod="GetData" />


The following is a web page example that uses the DynamicPopulateExtender
to dynamically populate data into a ModalPopupExtender’s shown modal:

%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="TestModalDialog.WebForm2" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>title>
<style type="text/css">
.modal
{
background-color: Gray;
filter: alpha(opacity=40);
opacity: 0.7;
}
.modalPopup
{
background-color: #ffffdd;
border-width: 3px;
border-style: solid;
border-color: Gray;
padding: 3px;
width: 250px;
}
style>
head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="ExampleService.asmx" />
Services>
asp:ScriptManager>
<div>
<input type="button" id="btnDummy" runat="server" value="Get Data" />
<asp:Panel ID="pnlPopup" runat="server" CssClass="modalPopup">
<div>
<asp:Panel ID="panelInfo" runat="server">
asp:Panel>
div>
<cc1:DynamicPopulateExtender ID="dpe" runat="server" TargetControlID="panelInfo"
PopulateTriggerControlID="btnDummy" ServicePath="ExampleService.asmx" ServiceMethod="GetData" />
<div>
<asp:Button ID="btnDlgOK" runat="server" Text="OK" />div>
asp:Panel>
<cc1:ModalPopupExtender ID="mpeData" runat="server" OkControlID="btnDlgOK" PopupControlID="pnlPopup"
TargetControlID="btnDummy" BackgroundCssClass="modal" DropShadow="true">
cc1:ModalPopupExtender>
div>
form>
body>
html>

Building the Page – Second Attempt

In the first example I used the DynamicPopulateExtender to populate
my modal popup. In this example I use the ModalPopupExtender’s
properties in order to do the same thing. ModalPopupExtender exposes
three properties:

  • DynamicControlID – the control that will be populated dynamically.
  • DynamicServicePath – the path to the ScriptService which will be used
    to dynamically populate the control.
  • DynamicServiceMethod – the method to call in the ScriptService.

Using these properties enables us to populate dynamically a control when a
modal pops up. The following example is doing the same like in the
first attempt but using the ModalPopupExtender’s properties:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="TestModalDialog.WebForm2" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>title>
<style type="text/css">
.modal
{
background-color: Gray;
filter: alpha(opacity=40);
opacity: 0.7;
}
.modalPopup
{
background-color: #ffffdd;
border-width: 3px;
border-style: solid;
border-color: Gray;
padding: 3px;
width: 250px;
}
style>
head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="ExampleService.asmx" />
Services>
asp:ScriptManager>
<div>
<input type="button" id="btnDummy" runat="server" value="Get Data" />
<asp:Panel ID="pnlPopup" runat="server" CssClass="modalPopup">
<div>
<asp:Panel ID="panelInfo" runat="server">
asp:Panel>
div>
<div>
<asp:Button ID="btnDlgOK" runat="server" Text="OK" />div>
asp:Panel>
<cc1:ModalPopupExtender ID="mpeData" runat="server" OkControlID="btnDlgOK" PopupControlID="pnlPopup"
TargetControlID="btnDummy" BackgroundCssClass="modal" DropShadow="true" DynamicControlID="panelInfo"
DynamicServiceMethod="GetData" DynamicServicePath="ExampleService.asmx">
cc1:ModalPopupExtender>
div>
form>
body>
html>

Summary

There are two ways to dynamically populate a ModalPopupExtender.
The first way is to use the DynamicPopulateExtender. The second
way is to use the ModalPopupExtender’s properties that enables
dynamic content to show up in the modal popup.