На данной странице будут размещаться примеры кодов ASP.NET 2.0 и C#.NET
------------------------------------------------------------------------------------------ Используемые приложения: Visual Studio 2005 и SQL Server 2005 Developer Edition(with SP2) ------------------------------------------------------------------------------------------
Пример всеже будет всего один, т.к. на данный момент я занимаюсь только с WinForms плюс тот код, что приведен здесь очень далек от идеала. Но он 100% рабочий и делался на коленке, как тестовое задание для ООО "ЭОС" г.Ковров. Рендеринг календаря в зависимости от даты в базе данных поддерживается три события: праздник, день рождения и событие(для простой записи), использованы части кода с сайта: http://gridviewguy.com/ArticleDetails.aspx?articleID=232(в части использования DataSet)
дата релиза: 05/08/2007 aspx-файл: (используются также два пользовательских элемента вверху и внизу(статичный текст + вывод текущей даты + внизу добавлен Ad-Rotator для вывода графики)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" UICulture= "Auto" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %> <%@ Register TagPrefix = "sampleheader" TagName = "Header" Src = "~/HeaderForAllPages.ascx" %> <%@ Register TagPrefix = "samplebottom" TagName = "Bottom" Src ="~/BottomControl.ascx" %> <!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> </head> <body> <form id="form1" runat="server"> <sampleheader:Header ID ="Header1" runat ="server"></sampleheader:Header> <br /> <asp:Calendar ID="calEvent" runat="server" BackColor="White" BorderColor="White" BorderWidth="1px" Font-Names="Verdana" Font-Size="9pt" ForeColor="Black" Height="208px" NextPrevFormat="FullMonth" Width="782px" ToolTip="Стандартный календарь c обработкой Day Render" style="left: 10px; position: relative; top: -11px" OnSelectionChanged="Calendar1_SelectionChanged" FirstDayOfWeek="Monday" OnDayRender="Calendar1_DayRender"> <SelectedDayStyle BackColor="#333399" ForeColor="White" /> <TodayDayStyle BackColor="#CCCCCC" /> <WeekendDayStyle BackColor="#C0FFFF" /> <OtherMonthDayStyle ForeColor="#999999" /> <NextPrevStyle Font-Size="8pt" ForeColor="#333333" Font-Bold="True" VerticalAlign="Bottom" /> <DayHeaderStyle Font-Bold="True" Font-Size="8pt" /> <TitleStyle BackColor="White" Font-Bold="True" Font-Size="12pt" ForeColor="#333399" BorderColor="Black" BorderWidth="4px" /> </asp:Calendar> <asp:TextBox ID="txtInfoHelp" runat="server" BorderStyle="None" ReadOnly="True" Width="626px"></asp:TextBox> <asp:Button ID="Add_Edit_Btn" runat="server" OnClick="Add_Edit_Btn_Click" Text="Добавить/редактировать" /> <asp:Button ID="Del_Btn" runat="server" OnClick="Del_Btn_Click" Text="Удалить" /><br /> <asp:GridView ID="gdwEvent" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None"> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#999999" /> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> </asp:GridView> <br /> <asp:TextBox ID="txtEdState" runat="server" ReadOnly="True" Visible="False" Width="3px"></asp:TextBox> <asp:TextBox ID="txtID" runat="server" Width="1px" Visible="False"></asp:TextBox> <asp:TextBox ID="txtDate" runat="server" Visible="False" ReadOnly="True"></asp:TextBox> <asp:TextBox ID="txtEvent" runat="server" Visible="False"></asp:TextBox> <asp:DropDownList ID="drpCategory" runat="server" Visible="False" OnSelectedIndexChanged="drpCategory_SelectedIndexChanged"> </asp:DropDownList> <asp:Button ID="Ok_Btn" runat="server" OnClick="Ok_Btn_Click" Visible="False" /> <asp:Button ID="btn_Del_Confirm" runat="server" Text="Удалить?" Visible="False" OnClick="btn_Del_Confirm_Click" /> <asp:Button ID="Cancel_Btn" runat="server" OnClick="Cancel_Btn_Click" Text="Отмена" Visible="False" /> <br /> <div> </div> <samplebottom:Bottom ID = "Bottom1" runat = "server"></samplebottom:Bottom> </form> </body> </html>
cs-файл:
using System; using System.Data; using System.Data.SqlClient; using System.Globalization; using System.Web; using System.Web.Configuration; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page { string connSTR = WebConfigurationManager.ConnectionStrings["CalendarConnectionString"].ConnectionString; string selStr = "SELECT EventID as [№записи], EventDate as [Дата], EventTitle as [Описание], EventCategory as [Код категории]FROM EventsOfCalendar order by EventDate"; private Int32 rez; DateTime infoDate = DateTime.Now; protected void Page_Load(object sender, EventArgs e) { GridViewShow(); gdwEvent.Visible = false; // делаем disable кнопку удаления пока не щелкнут день, который есть в базе Del_Btn.Enabled = false; // выведим информационную строку txtInfoHelp.Text = "---===Вывод полезной информации===---"; Cancel_Btn.Text = "Отмена"; } protected void Calendar1_SelectionChanged(object sender, EventArgs e) { //запихиваем данные в новый DataSet через GetData() DataSet selDS = GetData(); //присвоение selectDay выбранной даты в календаре DateTime SelectDay = calEvent.SelectedDate; string selDate; string mes = ""; selDate = SelectDay.ToShortDateString(); //проход по всем строкам DataSet'a и сравнение с выбранной датой календаря foreach (DataRow selrow in selDS.Tables[0].Rows) { //выбор строк с описанием и датой из DataSet string EvID = Convert.ToString(selrow["№записи"]).ToString(); string EvEvent = Convert.ToString(selrow["Описание"]).ToString(); string EvDate = Convert.ToDateTime(selrow["Дата"]).ToShortDateString(); if (SelectDay.ToShortDateString() == EvDate.ToString()) { //если есть, то заполняем mes описанием mes =EvEvent.ToString(); //делаем Visible кнопку удаления Del_Btn.Enabled = true; txtID.Text = EvID.ToString(); } } //проверяем если чего в mes
if (mes == "") //пусто! генерим строку об отсутсвии и добавляем дату из календаря для информации { txtInfoHelp.Text = "Нет события для данного дня: " + SelectDay.ToLongDateString(); //для будущих апдейтов или вставок //в зависимости от этого значения идет или в редактирование, либо во вставку txtEdState.Text = "0"; } else //если чего-то есть... { txtInfoHelp.Text = SelectDay.ToLongDateString() + " - " + mes; //для будущих апдейтов txtEdState.Text = "1"; } //присваиваем текстовым полям выбранные значения, если вдруг потянет поредактировать txtDate.Text = selDate; txtEvent.Text = mes; } protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { DataSet dsCalRen = GetData(); string s = e.Day.Date.ToShortDateString(); foreach (DataRow row in dsCalRen.Tables[0].Rows) { string EvDate = Convert.ToDateTime(row["Дата"]).ToShortDateString(); string EvCat = Convert.ToString(row["Код категории"]).ToString(); if (EvDate.Equals(s) && EvCat == "1") { Label lb = new Label(); lb.Text = "<BR>" + row["Описание"] as String; e.Cell.Controls.Add(lb); e.Cell.BackColor = System.Drawing.Color.LightSteelBlue; } else if (EvDate.Equals(s) && EvCat == "2") { Label lb = new Label(); lb.Text = "<BR>" + row["Описание"] as String; e.Cell.Controls.Add(lb); e.Cell.BackColor = System.Drawing.Color.HotPink; } else if (EvDate.Equals(s) && EvCat == "3") { Label lb = new Label(); lb.Text = "<BR>" + row["Описание"] as String; e.Cell.Controls.Add(lb); e.Cell.BackColor = System.Drawing.Color.LightGray; } } } protected void Add_Edit_Btn_Click(object sender, EventArgs e) { Enable_Edit_Element(); if (txtDate.Text == "") { txtDate.Text = infoDate.ToShortDateString(); } if (txtEdState.Text == "1") { Ok_Btn.Text = "Обновление данных"; } else { Ok_Btn.Text = "Добавление данных"; } /* добавление данных в dropdownlist с событиями, добавление категорий событий на данном этапе не реализовано */ SqlConnection conTab = new SqlConnection(connSTR); SqlCommand ComDrp = new SqlCommand("Select CategoryTitle from CategoriesOfEvents", conTab); conTab.Open(); drpCategory.DataSource = ComDrp.ExecuteReader(); drpCategory.DataTextField = "CategoryTitle"; drpCategory.DataValueField = "CategoryTitle"; drpCategory.DataBind(); conTab.Close(); } protected void Ok_Btn_Click(object sender, EventArgs e) { InsInTable(); Cancel_Btn.Text = "Закрыть режим"; } protected void Cancel_Btn_Click(object sender, EventArgs e) { Disable_Edit_Element(); } protected void Del_Btn_Click(object sender, EventArgs e) { Enable_Edit_Element(); // лишнее уберем Ok_Btn.Visible = false; // нужное добавим txtInfoHelp.Text = "Удаление события за " + txtDate.Text + "!!!"; txtInfoHelp.Font.Size = 16; txtInfoHelp.Font.Bold = true; txtInfoHelp.BackColor = System.Drawing.Color.LightPink; btn_Del_Confirm.Visible = true; drpCategory.Visible = false; } protected void btn_Del_Confirm_Click(object sender, EventArgs e) { // собственно удаление через хранимую процедуру DeleteEventsOfCalendar в базе string ID_Del; ID_Del = txtID.Text; SqlConnection sqlcon = new SqlConnection(connSTR); SqlCommand sqlcmdDel = new SqlCommand(); // название хр. процедуры и ее параметры sqlcmdDel.Connection = sqlcon; sqlcmdDel.CommandText = "DeleteEventsOfCalendar"; sqlcmdDel.CommandType = CommandType.StoredProcedure; SqlParameter parID = new SqlParameter("@EventID", SqlDbType.Int); parID.Value = ID_Del; sqlcmdDel.Parameters.Add(parID); sqlcon.Open(); try { sqlcmdDel.ExecuteNonQuery(); txtInfoHelp.BackColor = System.Drawing.Color.SkyBlue; txtInfoHelp.Text = "Данные за дату: " + txtDate.Text + " удалены!"; } catch (Exception exp) { txtInfoHelp.BackColor = System.Drawing.Color.Red; txtInfoHelp.Text = "Ошибочка: " + exp.Message; } finally { sqlcon.Close(); GridViewShow(); gdwEvent.Visible = true; Cancel_Btn.Text = "Закрыть режим"; Cancel_Btn.Focus(); } } protected void drpCategory_SelectedIndexChanged(object sender, EventArgs e) { string itemindex; itemindex = drpCategory.SelectedIndex.ToString(); rez = Convert.ToInt32(itemindex); }
// далее идут стандартные блоки, применяемые выше // запихиваем в DataSet все данные из таблицы EventsOfCalendar, чтоб потом легче к ним было обратиться private DataSet GetData() { SqlConnection myCon = new SqlConnection(connSTR); SqlDataAdapter sqlAD2 = new SqlDataAdapter(selStr, myCon); DataSet ds = new DataSet(); sqlAD2.Fill(ds); return ds; } private void GridViewShow() { // берем данные из GetData gdwEvent.DataSource = GetData(); gdwEvent.DataBind(); } //вставка данных в таблицу(Add & Update) private void InsInTable() { SqlConnection sqlcon = new SqlConnection(connSTR); // объявляем переменные для работы со значениями из текстбоксов и dropdownlist string inDate, inComment, inCat, inID; inDate = txtDate.Text; inComment = txtEvent.Text; rez = rez + 1; //корректировка индекса, индекс первого элемента в dropdownlist inCat = rez.ToString(); inID = txtID.Text; /*проверка,если txtEdState равен единице, т.е. совпал день в базе и календаре, то идем в редактирование, если равно нулю, то в добавление */ if (txtEdState.Text == "1") { // используется хран. процедура // определение параметров команды для хр. процедуры UpdateEventsOfCalendar SqlCommand sqlcmdUpd = new SqlCommand(); sqlcmdUpd.Connection = sqlcon; sqlcmdUpd.CommandText = "UpdateEventsOfCalendar"; sqlcmdUpd.CommandType = CommandType.StoredProcedure; // добавляем три параметра в команду процедуры SqlParameter parDateUp = new SqlParameter("@EventDate", SqlDbType.SmallDateTime); parDateUp.Value = inDate; sqlcmdUpd.Parameters.Add(parDateUp); SqlParameter parTitleUp = new SqlParameter("@EventTitle", SqlDbType.NVarChar, 50); parTitleUp.Value = inComment; sqlcmdUpd.Parameters.Add(parTitleUp); SqlParameter parCategUp = new SqlParameter("@EventCategory", SqlDbType.NVarChar, 50); parCategUp.Value = inCat; sqlcmdUpd.Parameters.Add(parCategUp); SqlParameter parIdUp = new SqlParameter("@EventID", SqlDbType.Int); parIdUp.Value = inID; sqlcmdUpd.Parameters.Add(parIdUp); sqlcon.Open(); try { sqlcmdUpd.ExecuteNonQuery(); txtInfoHelp.BackColor = System.Drawing.Color.SkyBlue; txtInfoHelp.Text = "Данные обновлены!"; } catch (Exception exp) { txtInfoHelp.BackColor = System.Drawing.Color.Red; txtInfoHelp.Text = "Ошибочка: " + exp.Message; } finally { sqlcon.Close(); GridViewShow(); gdwEvent.Visible = true; Cancel_Btn.Focus(); } } else { // используется хран. процедура InsertEventsOfCalendar // определение параметров команды для хр. процедуры SqlCommand sqlcmdIns = new SqlCommand(); sqlcmdIns.Connection = sqlcon; sqlcmdIns.CommandText = "InsertEventsOfCalendar"; sqlcmdIns.CommandType = CommandType.StoredProcedure; // добавляем три параметра в команду процедуры SqlParameter parDateIns = new SqlParameter("@EventDate", SqlDbType.SmallDateTime); parDateIns.Value = inDate; sqlcmdIns.Parameters.Add(parDateIns); SqlParameter parTitleIns = new SqlParameter("@EventTitle", SqlDbType.NVarChar, 50); parTitleIns.Value = inComment; sqlcmdIns.Parameters.Add(parTitleIns); SqlParameter parCategIns = new SqlParameter("@EventCategory", SqlDbType.NVarChar, 50); parCategIns.Value = inCat; sqlcmdIns.Parameters.Add(parCategIns); // ну в путь! открываем конект sqlcon.Open(); //исполняем команду и если удачно try { sqlcmdIns.ExecuteNonQuery(); txtInfoHelp.BackColor = System.Drawing.Color.SkyBlue; txtInfoHelp.Text = "Данные занесли!"; } // ну если вдруг ошибка, то нам сюды catch (Exception exp) { txtInfoHelp.BackColor = System.Drawing.Color.Red; txtInfoHelp.Text = "Ошибочка: " + exp.Message; } finally { //закрываем соединение sqlcon.Close(); GridViewShow(); gdwEvent.Visible = true; Cancel_Btn.Focus(); } } } private void Enable_Edit_Element() { //делаются видимыми элементы редактирования и сама таблица gdwEvent.Visible = true; txtDate.Visible = true; txtEvent.Visible = true; drpCategory.Visible = true; Ok_Btn.Visible = true; Cancel_Btn.Visible = true; // убираем лишние элементы calEvent.Visible = false; Add_Edit_Btn.Visible = false; Del_Btn.Visible = false; txtInfoHelp.Font.Size = 10; txtInfoHelp.BackColor = System.Drawing.Color.White; txtInfoHelp.Font.Bold = false; } private void Disable_Edit_Element() { //теперь наоборот gdwEvent.Visible = false; txtDate.Visible = false; txtEvent.Visible = false; drpCategory.Visible = false; Ok_Btn.Visible = false; Cancel_Btn.Visible = false; btn_Del_Confirm.Visible = false; // ------------------------ calEvent.Visible = true; Add_Edit_Btn.Visible = true; Del_Btn.Visible = true; txtInfoHelp.Font.Size = 10; txtInfoHelp.BackColor = System.Drawing.Color.White; txtInfoHelp.Font.Bold = false; } }
создание базы данных база CategoryofEvents используются автоматически созданные SQL Server скрипты USE [Calendar] GO /****** Object: Table [dbo].[CategoriesOfEvents] Script Date: 08/10/2007 12:39:35 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[CategoriesOfEvents]( [CategoryID] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NOT NULL, [CategoryTitle] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NULL, [CategoryColor] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NULL, CONSTRAINT [PK_CategoriesOfEvents] PRIMARY KEY CLUSTERED ( [CategoryID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
создание базы данных база EventsOfCalendar
USE [Calendar] GO /****** Object: Table [dbo].[EventsOfCalendar] Script Date: 08/10/2007 12:39:18 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[EventsOfCalendar]( [EventID] [int] IDENTITY(1,1) NOT NULL, [EventDate] [smalldatetime] NULL, [EventTitle] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NOT NULL, [EventCategory] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NULL, CONSTRAINT [PK_EventsOfCalendar] PRIMARY KEY CLUSTERED ( [EventID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
GO -------------------------------------
хранимые процедуры,используемые в программе
InsertEventsOfCalendar --------------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go
CREATE PROCEDURE [dbo].[InsertEventsOfCalendar] @EventDate smalldatetime, @EventTitle nvarchar(50), @EventCategory nvarchar(50) AS insert into [Calendar].[dbo].[EventsOfCalendar] ([EventDate], [EventTitle], [EventCategory]) values (@EventDate, @EventTitle, @EventCategory);
UpdateEventsOfCalendar ---------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go
CREATE PROCEDURE [dbo].[UpdateEventsOfCalendar] @EventID int, @EventDate smalldatetime, @EventTitle nvarchar(50), @EventCategory nvarchar(50) AS update [Calendar].[dbo].[EventsOfCalendar] SET EventDate =@EventDate, EventTitle=@EventTitle, EventCategory=@EventCategory where EventID=@EventID -----------------------------
DeleteEventsOfCalendar -------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go
CREATE PROCEDURE [dbo].[DeleteEventsOfCalendar] @EventID int AS delete from [Calendar].[dbo].[EventsOfCalendar] where EventID=@EventID
------------------------------------------------------------------------------------------------------------------- конец блока программы -------------------------------------------------------------------------------------------------------------------
|