-
Процедура знакомства
Типичная процедура знакомства с голландцем (американцем, итальянцем, французом и т.д.):
Он: Привет, я – Джон Смит (Вася Пупкин, Карл Маркс и т.д.).
Я: Привет, я – Дмитрий.
Он: Дмитрий, ты откуда (из какой страны)?
Я: Россия (гордо так)!
Он: …пауза… Да ты наверное из восточной части России (варианты: у тебя монгольские корни? / просто недоверчивый взгляд и ожидание шутки / я представлял себе русских немного иначе)И каждый раз мне приходится углубляться в историю моей семьи и объяснять аборигену, как так получилось. И что странно, в Нидерландах 20% жителей имеют индонезийские корни, еще 20% турецкие, еще 20% марокканские, а поверить в то, что в России такое тоже возможно никто не может. Наверное, Россия для европейцев все еще кажется чем-то монолитным и однородным, как было (или казалось, что было) в советские времена.
-
Топ-10 бельгийского пива
Не могу не поделиться ссылкой: http://zapizki.blogspot.com/2009/03/belgiyskoe-pivo-top-10.html. Всем читать и облизываться!
-
Экспорт содержимого GridView в Excel
Очень часто при разработке веб-приложений на asp.net возникает задача осуществления эскпорта данных из GridView в экселевский файл. При этом каждый начинает придумывать свой велосипед, потому что можно придумать с десяток различных методов как это сделать. Я предлагаю на мой взгляд самый простой вариант.
Сразу хочу отметить, весь приведенный код написан на VB.NET. Так произошло не потому, что мне так нравится, а потому что так принято в компании, в которой я работаю. Если вы хотите получить этот код на C#, просто воспользуйтесь онлайн конвертером, например, http://www.developerfusion.com/tools/convert/vb-to-csharp/.
Итак, что нам нужно:
1. Вспомогательный класс. Я назвал его ExcelExportHelper. Его код приведен ниже
Imports System Imports System.Data Imports System.Configuration Imports System.IO Imports System.Web Imports System.Web.Security Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts Imports System.Web.UI.HtmlControls Public Class ExcelExportHelper Public Shared Sub PrepareAndExport(ByVal fileTitle As String, ByVal gv As GridView, ByVal showGrid As Boolean) Dim filename As String filename = String.Format("{0}_{1}.xls", fileTitle, DateTime.Now().ToString("yyyyMMdd_HHmmss")) gv.AllowPaging = False gv.DataBind() ExcelExportHelper.Export(filename, gv, showGrid) End Sub Public Shared Sub Export(ByVal fileName As String, ByVal gv As GridView, ByVal showGrid As Boolean) HttpContext.Current.Response.Buffer = True HttpContext.Current.Response.ClearContent() HttpContext.Current.Response.ClearHeaders() 'HttpContext.Current.Response.ContentType = "application/vnd.ms-excel" HttpContext.Current.Response.ContentType = "application/ms-excel" HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename = " + fileName) Dim sw As StringWriter = New StringWriter Dim htw As HtmlTextWriter = New HtmlTextWriter(sw) ' Create a form to contain the grid Dim table As Table = New Table If (showGrid) Then table.GridLines = gv.GridLines Else table.GridLines = GridLines.None End If ' add the header row to the table If (Not (gv.HeaderRow) Is Nothing) Then PrepareControlForExport(gv.HeaderRow) table.Rows.Add(gv.HeaderRow) End If ' add each of the data rows to the table For Each row As GridViewRow In gv.Rows PrepareControlForExport(row) table.Rows.Add(row) Next ' add the footer row to the table If (Not (gv.FooterRow) Is Nothing) Then PrepareControlForExport(gv.FooterRow) table.Rows.Add(gv.FooterRow) End If ' render the table into the htmlwriter table.RenderControl(htw) ' render the htmlwriter into the response HttpContext.Current.Response.Write(sw.ToString) HttpContext.Current.Response.End() End Sub ' Replace any of the contained controls with literals Private Shared Sub PrepareControlForExport(ByVal control As Control) Dim i As Integer = 0 Do While (i < control.Controls.Count) Dim current As Control = control.Controls(i) If (TypeOf current Is LinkButton) Then control.Controls.Remove(current) control.Controls.AddAt(i, New LiteralControl(CType(current, LinkButton).Text)) ElseIf (TypeOf current Is ImageButton) Then control.Controls.Remove(current) control.Controls.AddAt(i, New LiteralControl(CType(current, ImageButton).AlternateText)) ElseIf (TypeOf current Is HyperLink) Then control.Controls.Remove(current) control.Controls.AddAt(i, New LiteralControl(CType(current, HyperLink).Text)) ElseIf (TypeOf current Is DropDownList) Then control.Controls.Remove(current) control.Controls.AddAt(i, New LiteralControl(CType(current, DropDownList).SelectedItem.Text)) ElseIf (TypeOf current Is CheckBox) Then control.Controls.Remove(current) control.Controls.AddAt(i, New LiteralControl(CType(current, CheckBox).Checked)) 'TODO: Warning!!!, inline IF is not supported ? End If If current.HasControls Then PrepareControlForExport(current) End If i = (i + 1) Loop End Sub End Class
Вкратце, что делает этот класс: есть два статичных публичных метода: PrepareAndExport и Export.
Метод PrepareAndExport убирает в GridView разбивку на страницы, для того чтобы получить в экселевском файле все записи со всех страниц. Так же этот метод определяет имя целевого файла. В моем случае к переданной строковой переменной будет прибавлено текущее время. После этого PrepareAndExport вызывает метод Export, который собственно и генерирует output. PrepareControlForExport нужен для замены пользовательских контролов в GridView, эти контролы нужны на веб-странице, но совершенно бессмысленны в Excel.
2. Размещаем на asp странице кнопку для осуществления экспорта:
<asp:ImageButton ID="ibExportToExcel" runat="server" ImageUrl="~/Img/export-excel.png" OnClick="ibExportToExcel_Click">
Привязываем в ней onClick событие ibExportToExcel_Click.
3. Реализуем это событие в code-behind страницы:
Protected Sub ibExportToExcel_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) ExcelExportHelper.PrepareAndExport(Page.Title, gvContent, True) End Sub
Ну вот собственно и все, теперь при нажатии на кнопку экспорта произойдет вызов метода PrepareAndExport класса ExcelExportHelper. В качестве параметров этому методу передаем Page.Title (либо любую другую строку в качестве имени файла), GridView, который нужно экспортировать, и true (отображать границы таблицы в экселе).
Теперь несколько “НО”:
1. Если у клиента установлен Microsoft Excel 2007, то при открытии сгенерированного файла мы получим Security Alert.
Дело в том, что мы пытаемся подсунуть Excel-ю сгенерированный нами html файл. Он это понимает и сообщает, что содержание файла не соответствует его расширению. К сожалению, нормального пути обойти это сообщение нет. Единственное, что можно сделать – покопаться в реестре:
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security]
“ExtensionHardening”=dword:000000001. Open your Registry (Start -> Run -> regedit.exe)
2. Navigate to HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\12.0\EXCEL\SECURITY3. Right click in the right window and choose New -> DWORD
4. Type “ExtensionHardening” as the name (without the quotes)
5. Verify that the data has the value “0?
2. Если кнопка ibExportToExcel находится в Update Panel, то необходимо добавить ее в триггер:
<asp:UpdatePanel ID="upContent" runat="server" UpdateMode="Always"> <Triggers> <asp:PostBackTrigger ControlID="ibExportToExcel" /> </Triggers>
-
Мой первый сайт
Свой первый сайт я сделал в 2001 году. Он был посвящен поездке группы школьников из обычной самарской школы в замечательный американский городок Eaton Rapids. Я, естественно, был среди этих школьников
У сайта было две версии: оригинальная, сделанная в течении пары недель в начале 2001 года, и вторичная, сделанная лично мной несколько позже. Вообще говоря, над оригинальным сайтом трудилось порядка 10-15 человек, и он был сделан, как говорится, "с душой", но версткой занимался в основном я.
Сегодня я случайно нашел обе версии на своем необъятном переносном жестком диске и решил, что должен поделиться с общественностью)
Оригинальная версия лежит по адресу: http://www.dimants.ru/slp_iatp_ru
Переделанный вариант по адресу: http://www.dimants.ru/slp_iatp_ru_2
Должен отметить, что, посмотрев на оба эти сайта сейчас 4 марта 2009 года, мне кажется, что они сделаны совсем неплохо. Особенно оригинальный вариант. Переделанный потерял какую-то часть своей самобытности и стал обычным непонятным фиолетовым пятном :). К тому же он работает только в самом свежем браузере IE 5!
Товарищи, прокомментируйте, что вы думаете
-
Статистика по поисковым запросам с 16 по 22 февраля 2009 года
Ниже список поисковых запросов, которые люди набирали в Яндексе и в результатах которых отображался мой сайт.
Запрос Показы Позиция парадокс монти холла22 7 flvplayer.swf18 5 flv плеер для сайта17 9 вставка видео на сайт13 1 flv плеер на сайт11 5 php smtp10 10 жизненно8 4 www.ladachess.ru7 4 мое дерево6 8 flv на сайт5 3 flv видео5 10 class.phpmailer.php4 5 как скачать flv с сайта4 15 flv проигрыватель4 32 копирование flv с сайта3 3 техносила магазин3 49 скачать видео в формате flv3 14 парадокс монти-холла3 6 скачать проигрыватель для формата flv3 9 youtube flv3 7 ladachess3 8 видео flv3 19 видео формата flv3 30 гибдд3 7 парадокс с тремя дверьми3 8 -
Рекомендации по Таиланду
Весной прошлого 2008 года мы ездили в Таиланд, а точнее в Паттайю. А примерно за полгода до этого туда же ездили мои родители. Так вот моя мама написала нам список рекомендаций, что нужно посмотреть, куда сходить и чего делать ну никак нельзя. Я думаю, это небольшое описание может быть полезно для тех, кто собирается съездить в Таиланд, по собственному опыту скажу, что нам оно пригодилось.
Итак, выкладываю с очень незначительной правкой:
О Тайланде.
Самое главное правило туриста- быть вежливым ,спокойным и выдержанным, всегда улыбаться ,и тогда никаких проблем с местным населением не будет. Важно помнить, что, если таец начинает истерически смеяться, то это значит вы довели его до «ручки». Смех – это способ самозащиты от излишне агрессивного европейского туриста.
О Паттайе.
Центральная часть города состоит из трех идущих параллельно морю улиц: 1-ая, 2-ая, 3-ая. Поскольку вы будете жить в центре, то прогулки и шоппинг можно делать не пользуясь безумными тук-туками. Наиболее проходимы ( в плане пеших прогулок) 1-ая и 2-ая улицы: там много больших и мелких магазинов, безумное количество едален ( кафешками и ресторанами эти заведения назвать трудно). Честно говоря, мы не решились поесть на улице ни разу.
О еде.
Между 1-ой и 2-ой улицами стоит самый классный (в смысле звездности) торговый центр-Royal Garden Plaza. На последнем этаже находится сеть ресторанов. Там есть и японский, и итальянский, и еще какой-то, но самое интересное – это комплекс питания, где можно поесть блюда разных стран одновременно и недорого. При входе необходимо на кассе взять карточку за 1000 бат на каждого. Не пугайтесь, на выходе все не использованные деньги вернут, но как правило даже нам этой суммы было много. Выбор там просто огромный: начиная от стейков, всевозможных блюд тайской, китайской, русской, итальянской и кончая очень вкусными десертами.
Обычно мы тратили там где-то 1200бат(на двоих) Это наиболее приемлемое место для питания: прилично и относительно недорого. Кстати, попробуйте коктейли из фруктов со льдом.
При заказе блюд тайской кухни обязательно предупредите чтобы делали не острое (no spicy), даже для нас все оказалось очень острым.
В этом же торговом центре на первом этаже есть Макдональдс. Больше поблизости я что-то Макдональдса не встречала.
Кстати, в этом торговом центре самый приличный шоппинг. Все остальные торговые центры больше похожи на рынок, но несколько дешевле, чем в Plaza..
На Walking street стоит целый ряд ресторанов с морепродуктами, там же подают и мясо.Что стоит посмотреть.
Думаю, что в Бангкок ездить не стоит тратить драгоценное время, потому что и в Паттайе полно интересного. Во первых, надо обязательно покататься на слонах, во-2-х, шоу трансвеститов Тиффани (не пожалейте деньги на представление Тиффани, оно наиболее красочное). Постарайтесь попасть в тропический сад Нонг-Нуч. Сам сад очень красив и интересен, там можно увидеть сотни видов архидей, небольшой зоопарк, покататься на слонах, сфотографироваться с тигром, посмотреть представление со слонами (просто обалденное!), а, главное поучаствовать в романтическом ужине и запустить горящий фонарик в небо (очень романтичное и красивое действие).
Во время обзорной экскурсии в буддийском храме завяжите веревочку на руку у монаха и загадайте желание, выпустите птичек на волю, предварительно купив у подножия горы. В конце экскурсии вас обязательно привезут в ювелирный центр.
Если все-таки решитесь посмотреть на крокодилов или змей, то советую крокодиловую ферму. Территория фермы очень большая. В одном месте находятся и сад камней, и приличный зоопарк, и можно сфотографироваться со слонами (кстати, там есть маленький слоненок, недавно родившийся), и еще можно покормить огромных рыбин в прудах. Ну естественно и крокодилы в огромном количестве: это и представление с крокодилами, и кормежка их. По времени вся поездка занимает где-то полдня. Представления идут по графику ( где-то каждый час), поэтому, если поедете самостоятельно, то предварительно узнайте когда удобнее туда поехать.
Очень жаль, что не успеете съездить на реку Квай. Впечатлений от поездки море. Но, я думаю, что все у вас еще впереди.
В Паттайе есть еще крокодиловая и змеиная фермы. Туда можно ехать, если очень захочется острых ощущений. Вот Аквариум совсем неинтересный. Если останутся деньги и время можно съездить в Мини Сиам (там прикольно). Мини Сиам работает в светлое время суток (где-то до 18-00-19-00). Рядом с Сиамом вечером работает огромный рынок со всевозможной едой. Сплошная экзотика! Доехать туда и обратно можно на тук-туке.Шоппинг.
Сувениры лучше покупать в большом сувенирном магазине Lukdod. Вероятнее всего, что вас привезут туда во время обзорной экскурсии. Там же находится большой ювелирный центр. Почему лучше покупать в магазине, а не на улице: во 1-х, там прохладно и удобно, во 2-х, цены не очень отличаются от уличных, в 3-х, выбор просто огромный. Приехав в ювелирный центр можно остаться там подольше и самостоятельно добраться от туда домой (даже пешком).
Я уже отмечала, что Plaza, мне понравился больше всего, и в плане торговых марок, и в плане выбора. Дешево и более менее прилично- это Big C.Необходимо помнить!
Отношение тайцев к деньгам буддийское: равнодушное. Поэтому они не воспринимают мелочь как деньги. В виду этого расплачиваться ЖЕЛАТЕЛЬНО бумажными купюрами ( даже чаевые для горничной), а вот с бумажными деньгами необходимо обращаться очень аккуратно, поскольку на купюре изображен король, а для тайцев это свято. Гиды рассказывают, что был случай, когда туриста посадили в тюрьму за то, что тот разорвал купюру. В общем, это все очень серьезно.
О чаевых.
Горничной в отеле в два- три дня по 20 Бат. Носильщикам- 10-20бат, в ресторане как обычно-10%.
Как одеваться.
Шорты и майка, сланцы. Кстати тротуары в Паттайе не ахти какие, поэтому на каблуках ходить там просто мучение (из личного опыта).
Телефон
Телефонную сим карту можно купить в магазинах «Seven 11», там же продавец может ее подключить. Самостоятельно почти ни у кого это не получается из-за незнания тайского языка. Сразу же положите еще немного денег.
При отъезде не забудьте поменять оставшиеся баты, потому что вывозить национальные деньги нельзя ( карается по закону).О транспорте.
Конечно же тук-тук. Хоть это и опасно, и неудобно, но как побывать в Тайланде и не поездить на тук-туке. В центре по прямой совсем недорого ( 10-20бат), можно договариваться как с обычными такси, предварительно оговорив цену, тогда водители никого не подсаживают. К примеру, до своего отеля ( в 15-20км от центра) мы обычно доезжали за 200-250 бат. Главное надо обязательно торговаться.
О Walking street.
Гуляйте, глазейте, но в никакие контакты с местным населением не входите! Говорят, что специально подсовывают наркотики ( особенно молодежи), а полиция тут как тут. У полицейских есть свой план по наркотикам. Ни в коем случае не поддавайтесь на всевозможного рода провокации, с тайской полицией лучше не иметь никаких дел.
Обязательно носите с собою ксерокопии паспортов.При входе куда-либо сложите ладони у лица в районе подбородка и, улыбаясь, говорите: « сабодикап»- так здороваются мужчины, женщины- сабодика.
Уровень подъема ладоней у лица очень важная деталь. Чем выше положение в обществе, тем выше необходимо поднимать ладони. И так,
САБОДИКАП- здравствуйте ( сабодика)
КАПУНКАП – спасибо ( капункап)


