Рассылка закрыта
При закрытии подписчики были переданы в рассылку "BloggLand и Я | Блоггландия" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2004 → | ||||||
1
|
2
|
3
|
4
|
5
|
||
---|---|---|---|---|---|---|
7
|
8
|
9
|
10
|
11
|
12
|
|
13
|
15
|
16
|
17
|
18
|
19
|
|
20
|
22
|
23
|
24
|
25
|
26
|
|
27
|
29
|
30
|
31
|
Статистика
0 за неделю
В двадцать девтом выпуске рассылки '.Net Собеседник' вы можете прочесть обзор новых компонент и продуктов, разработанных с использованием платформы .Net, больше узнать о выражениях, использующихся для привязки к данным,
Информационный Канал Subscribe.Ru |
.Net Собеседник #29
Содержание- От автора
- Обзор новостей
- Пристальный взгляд на выражения привязки к данным
- Время кода - Поговорим о политике
- Форумы .Net на www.sql.ru
От автора
Здравствуйте, коллеги!
В С#, как и во многих других языках, есть встроенный тип перечислений. В работе с ним есть и свои особенности. В частности, мы можем указывать какой числовой тип используется «за кулисами перечисления». Также с помощью метода Format мы можем выводить переменные типа enum в разных видах – строковом, числовом, шестнадцатиричном. Интересны два подхода к приведению строкового или числового значения к перечислению, их можно использовать в веб-приложениях при передаче числовых/строковых параметров на другую страницу.
using System; namespace hDrummer.Enum2 { class Starter { enum Months : byte {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec} [STAThread] static void Main() { Months m = Months.Feb; // Выводим в виде строки Console.WriteLine(m.ToString()); // выводим в виде числа, можно также использовать g(G) для вывода в виде строки и x(X) - в шестнадцатиричном виде Console.WriteLine(Enum.Format(typeof(Months), m, "d")); // приводим строковое значение к перечислению m = (Months) Enum.Parse(typeof(Months), "Jan"); // можно и так m = (Months)0; Console.WriteLine(m.ToString()); } } } //Вывод на экране //Feb //1 //Jan |
На этом всё - желаю интересного чтения.
Обзор новостей
-
Вышел
NDoc 1.3
- Ndoc – инструмент генерации документации с наращиваемым API, предназначенный для разработчиков .NET. В новой версии пофиксено множество ошибок, а также добавлено новых возможностей.
-
VersionOne объявила о выходе
новой версии инструмента v1.5 Agile Development Management
- VersionOne выпустила последнюю версию базированного на платформе Microsoft .NET инструмента для быстрого планирования и управления. Последний выпуск ПО от VersionOne включает поддержку для нескольких методологий быстрого планирования, включая Extreme Programming (XP), Scrum, Dynamic Systems Development Method (DSDM) и AgileUP.
-
Вышел набор API для интеграции с Outlook 2003
- Microsoft выпустила в народ API, ранее предназначавшееся только для внутреннего использования – для создания приложений, работающих с Microsoft Outlook. В API реализовано управления учётными записями, состоянием соединения, занят/свободен, конверсией MAPI-MIME, и управлением хранилищем Outlook. Документация по API есть только для Outlook 2003 SP1.
-
Членство,
роли и профили ASP.NET 2.0 в ASP.NET 1.1
- Microsoft выпустила прототип компонента для ASP.NET 1.1, содержащий функциональность для членства(Membership), ролей (Roles) и профилей (Profiles), которые появятся в ASP.NET 2.0. Позиционируемое как временное решение в качестве облегчения миграции на ASP.NET 2.0, это ПО поддерживает аутентификацию, автррзацию и управление профилями пользователей.
-
Microsoft
выпускает новую версию превью Visual Studio
- Microsoft Corp. выпускает новый релиз среды разработчика Visual Studio 2005 (Community Technology Preview). CTP доступна для скачивания через Microsoft Developer Network. ПО ссылке рассказыватеся как Microsoft усилила безопасность в Visual Studio 2005.
Пристальный взгляд на выражения привязки к данным
Пристальный
взгляд на выражения привязки к данным
В этой статье обсуждаются некоторые трюки при работе с DataBinder.Eval в
приложениях ASP.NET, работающих с данными.
ЯЗЫК:
Автор статьи: Scott Allen
ПЕРЕВОД: Чужа В.Ф. ака hDrummer
Выражения привязки к данным в приложениях ASP.NET – это небольшие участки кода,
которые вы видите в aspx-файлах между символами <%# и %>. Обычно мы видим
такие выражения при использовании компонентов Repeater (шаблон ItemTemplate) и
DataGrid (шаблон TemplateColumn). Также нужно заметить, что выражения привязки
к данным часто содержат вызов метода DataBinder.Eval. И хотя это довольно
типичный сценарий для привязки в ASP.NET, зная процессы, происходящие за
кулисами, можно сделать гораздо больше в этом направлении. В этой статье мы
рассмотрим процессы работы привязки к данным, как и когда они работают и
продемонстрируем некоторые трюки, которые можно использовать для более тонкой
настройки выражений привязки к данным.
<form id="Form2" method="post" runat="server">
<table ID="Table3"> <asp:Repeater id="Repeater1" runat="server"> <ItemTemplate> <tr> <td><%# DataBinder.Eval(Container.DataItem, "Name") %></td> <td><%# DataBinder.Eval(Container.DataItem, "HexValue") %></td> </tr> </ItemTemplate> </asp:Repeater> </table> </form> |
В этом примере для отображения данных мы используем компонент Repeater. Мы
знаем, что мы можем привязать Repeater к объектам DataTable, DataView,
SqlDataReader и т.д. Одна из приятных особенностей привязки к данным – способ,
каким ASP.NET абстрагирует источник исходных данных, юлагодаря чему нам не
нужно точно знать тип объекта, к которому мы привязываемся.
public class Color { public Color(string name, byte r, byte g, byte b) { this.name = name; hexValue = String.Format("#{0:X2}{1:X2}{2:X2}",r, g, b); } public string Name { get { return name; } } public string HexValue { get { return hexValue; } } private string name; private string hexValue; } |
public static ArrayList GetColors() { ArrayList list = new ArrayList(); list.Add(new Color(System.Drawing.Color.AliceBlue.Name, System.Drawing.Color.AliceBlue.R, System.Drawing.Color.AliceBlue.G, System.Drawing.Color.AliceBlue.B) ); list.Add(new Color(System.Drawing.Color.Beige.Name, System.Drawing.Color.Beige.R, System.Drawing.Color.Beige.G, System.Drawing.Color.Beige.B) ); list.Add(new Color(System.Drawing.Color.Chocolate.Name, System.Drawing.Color.Chocolate.R, System.Drawing.Color.Chocolate.G, System.Drawing.Color.Chocolate.B) ); list.Add(new Color(System.Drawing.Color.DarkMagenta.Name, System.Drawing.Color.DarkMagenta.R, System.Drawing.Color.DarkMagenta.G, System.Drawing.Color.DarkMagenta.B) ); list.Add(new Color(System.Drawing.Color.Fuchsia.Name, System.Drawing.Color.Fuchsia.R, System.Drawing.Color.Fuchsia.G, System.Drawing.Color.Fuchsia.B) ); list.Add(new Color(System.Drawing.Color.PapayaWhip.Name, System.Drawing.Color.PapayaWhip.R, System.Drawing.Color.PapayaWhip.G, System.Drawing.Color.PapayaWhip.B) ); list.Add(new Color(System.Drawing.Color.Violet.Name, System.Drawing.Color.Violet.R, System.Drawing.Color.Violet.G, System.Drawing.Color.Violet.B ) ); list.Add(new Color(System.Drawing.Color.Black.Name, System.Drawing.Color.Black.R, System.Drawing.Color.Black.G, System.Drawing.Color.Black.B ) ); return list; } |
<asp:Repeater id="Repeater1" runat="server"> <ItemTemplate> <tr bgcolor="<%# DataBinder.Eval(Container.DataItem, "HexValue")%>"> <td><%# DataBinder.Eval(Container.DataItem, "Name") %></td> <td><%# DataBinder.Eval(Container.DataItem, "HexValue") %></td> </tr> </ItemTemplate> </asp:Repeater> |
За кулисами выражений привязки к данным
public void __DataBind__control3(object sender, System.EventArgs e) { System.Web.UI.WebControls.RepeaterItem Container; System.Web.UI.DataBoundLiteralControl target; target = ((System.Web.UI.DataBoundLiteralControl)(sender)); Container = ((System.Web.UI.WebControls.RepeaterItem)(target.BindingContainer)); #line 17 "E:\dev\xprmnt\aspnet\DataBinding\SimpleData.aspx" target.SetDataBoundString(0, System.Convert.ToString(DataBinder.Eval(Container.DataItem, "HexValue"))); #line 18 "E:\dev\xprmnt\aspnet\DataBinding\SimpleData.aspx" target.SetDataBoundString(1, System.Convert.ToString(DataBinder.Eval(Container.DataItem, "Name"))); #line 19 "E:\dev\xprmnt\aspnet\DataBinding\SimpleData.aspx" target.SetDataBoundString(2, System.Convert.ToString(DataBinder.Eval(Container.DataItem, "HexValue"))); } |
<asp:Repeater id="Repeater1" runat="server"> <ItemTemplate> <tr bgcolor="<%# ((Color)Container.DataItem).HexValue %>"> <td><%# ((Color)Container.DataItem).Name %></td> <td><%# ((Color)Container.DataItem).HexValue %></td> </tr> </ItemTemplate> </asp:Repeater> |
<asp:Repeater id="Repeater1" runat="server"> <ItemTemplate> <tr bgcolor="<%# ((Color)Container.DataItem).HexValue %>"> <td><%# GetColorName(Container.DataItem) %></td> <td><%# ((Color)Container.DataItem).HexValue %></td> </tr> </ItemTemplate> </asp:Repeater> |
protected string GetColorName(object o) { string name = string.Empty; Color color = o as Color; if(color != null) { name = color.Name; int i = 1; do { if(char.IsUpper(name, i)) { name = name.Insert(i, " "); i = i +2; } else { i = i + 1; } } while(i < name.Length); } return name; } |
Время кода
Поговорим о
политике
ЯЗЫК: C#
АВТОР:Чужа В.Ф ака hDrummer, Информация
об авторе
Код к статье: -
Политизация общества достигла, пожалуй, наивысшей точки в последние
месяцы. Решил отдать этому дань и я в этом небольшом примере, демонстрирующем
использование абстрактных классов, наследования, полиморфизма, использования
массивов объектов и интерфейсов.
using System; namespace Voter { class TestVoter { [STAThread] static void Main(string[] args) { // Можно сделать так, привычным путём // VoterForU vfu = new VoterForU(); // vfu.ExitPool(); // vfu.IDoVoteFor(); // VoterForYa vfy = new VoterForYa(); // vfy.ExitPool(); // vfy.IDoVoteFor(); // VoterAgainstAll vaa = new VoterAgainstAll(); // vaa.ExitPool(); // vaa.IDoVoteFor(); // А можно чуть-чуть извратиться RealMan[] rm = {new VoterForU(), new VoterForYa(), new VoterAgainstAll()}; foreach (RealMan r in rm) { // полиморфизм в действии r.ExitPool(); // поскольку все классы реализуют интерфейс IVote, то будет вызвана собственная реализация для каждого из классов ((IVote)r).IDoVoteFor(); } } } // Вывод на экране // Чебурашка: Отдам свой голос за Януковича (просто не хочу говорить правду). // Чебурашка голосует за Ющенко, № паспорта 3222223 // Крокодил Гена: Отдам свой голос за Януковича. // Крокодил Гена голосует за Януковича, № паспорта 2333332 // Шапокляк: Да пошли б они оба! Лариска! За мной! // Шапокляк голосует против всех, № паспорта 01010101 // абстрактный класс - какой-то человек с каким-то набором данных abstract class Man { protected string fio; protected string passportNumber; } // реальный человек, с помощью конструктора заполняем поля реальными данными // обратите внимание на то, что поля используются те, которые объявлены в абстрактном классе class RealMan : Man { public RealMan(string fio, string passportNumber) { this.fio = fio; this.passportNumber = passportNumber; } // виртуальный метод, отображающий ответ на выходе public virtual void ExitPool() { Console.WriteLine("Не скажу, кому отдам свой голос."); } } // класс наследуется от другого класса и интерфейса class VoterForU : RealMan, IVote { // конструктор обращается к конструктору базового класса public VoterForU():base("Чебурашка", "3222223"){} // реализация метода интерфейса public void IDoVoteFor() { Console.WriteLine(base.fio+" голосует за Ющенко, № паспорта "+base.passportNumber); } // перегруженный метод базового класса RealMan public override void ExitPool() { Console.WriteLine(base.fio+": Отдам свой голос за Януковича (просто не хочу говорить правду)."); } } class VoterForYa : RealMan, IVote { public VoterForYa():base("Крокодил Гена", "2333332"){} public void IDoVoteFor() { Console.WriteLine(base.fio+" голосует за Януковича, № паспорта "+base.passportNumber); } public override void ExitPool() { Console.WriteLine(base.fio+": Отдам свой голос за Януковича."); } } class VoterAgainstAll : RealMan, IVote { public VoterAgainstAll():base("Шапокляк","01010101"){} public void IDoVoteFor() { Console.WriteLine(base.fio+" голосует против всех, № паспорта "+base.passportNumber); } public override void ExitPool() { Console.WriteLine(base.fio+": Да пошли б они оба! Лариска! За мной!"); } } interface IVote { void IDoVoteFor(); } } |
На этом всё.
{К содержанию}
Форумы .Net - вопросы оставшиеся без ответа
Не
сразу обновляется поле в таблице Access
OleDBConnection
& ASP.NET
Склейка
нескольких таблиц
INSERT
INTO: как указать, что значение в VALUES это число со зн. после запятой?
Custom
WebControl
SmartNavigation
= "true" А при постбэке бросает наверх :-(
Textbox
в гриде
Get
на сервер
файл
ошибок для ASP.NET
На этом двадцать девятый выпуск .Net Собеседника закончен.
До следующего номера.
Чужа Виталий Ф. aka hDrummer,
hdrummer@sql.ru - жду ваши предложения, вопросы и замечания.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.dotnetgrains |
Отписаться |
В избранное | ||