как вставить данные из ячейки календаря в базу данных - PullRequest
0 голосов
/ 07 июля 2011

У меня есть календарь, и я смог добавить текстовое поле внутри ячейки, используя событие day-render, но я пытаюсь сделать так, чтобы пользователь мог добавить данные в текстовое поле, а затем нажать кнопку добавления и содержимое добавляется в базу данных и показывается в том же текстовом поле:

вот что я сделал:

    protected void Page_Load(object sender, EventArgs e)
{
    Calendar1.SelectedDate = DateTime.Now;
}

protected void update(object sender, DayRenderEventArgs e) 
{
    TextBox tb = new TextBox();
    Button1.click += new EventHandler(insert);

    e.Cell.Controls.Add(Button1);
    e.Cell.Controls.Add(textBox2);
}

protected void insert(object sender, EventArgs e) 
{

}

и я знаю, как вставить данные, но я теряюсь, как их идентифицировать и вывести обратно в то же текстовое поле

спасибо

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

Ну, я не уверен точно, на какой части вы потерялись, основываясь на вашем вопросе, поэтому если не привести полный рабочий пример, я затрону некоторые из основных пунктов:

1) Для идентификации данных, которые вы вставляете, прикрепите дату (и время, если применимо) к записи. (Изменить: вы ищете механизм для достижения этой цели? Если это так, опубликуйте ваш текущий DayRender код обработчика и Calendar разметка).

2) Чтобы заполнить отдельные данные дня в календаре, используйте Calendar.VisibleDate (для фильтрации результатов БД) в обработчике Page.Load, чтобы загрузить структуру данных (например, List<T>) с данными дня за весь месяц. , Затем в обработчике Calendar.DayRender добавьте соответствующие записи из структуры в e.Cell.

3) Чтобы новые результаты отображались на первом обновлении страницы после вставки, вы должны иметь возможность использовать Response.Redirect для текущей страницы после вставки. Это приведет к перезапуску процесса генерации страницы, но вы потеряете ViewState.


Редактировать: вот основной прототип того, что я пытался описать выше. Обратите внимание, что вы можете предварительно выбрать любой перечисляемый тип данных, здесь я использую List<T>.

//Page code-behind
public partial class Default2 : System.Web.UI.Page
{
    List<DataObject> liCurrentMonth = new List<DataObject>();

    protected void Page_Load(object sender, EventArgs e)
    {
        liCurrentMonth = DataObject.GetCurrentMonth(Calendar1.VisibleDate);   
    }

    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        foreach (DataObject item in liCurrentMonth)
        {
            if (item.date == e.Day.Date)
            {
                Literal lit = new Literal();
                lit.Text = item.text;
                e.Cell.Controls.Add(lit);
            }
        }
    }
}

//Data layer object
public class DataObject
{
    public DateTime date { get; set; }
    public string text { get; set; }

    public static List<DataObject> GetCurrentMonth(DateTime currentdate)
    {
        //Get items from the db here, based on currentdate parameter
        //and populate the List<DataObject>.
        return new List<DataObject>();
    }
}
0 голосов
/ 07 июля 2011

Я не уверен, что ты заставишь это работать. Это состояние просмотра страницы, которое запоминает значение, введенное в текстовые поля и т. Д. Представление создается непосредственно перед визуализацией страницы. Событие Calendar DayRender вызывается во время рендеринга календарей и, следовательно, после того, как viewstate сделал свое дело. Поэтому механизм viewstate не знает о существовании текстовых полей и поэтому не будет отслеживать их содержимое.

Возможно, вы могли бы назначить каждому текстовому полю идентификатор на основе номера месяца и дня; при обратной передаче вы можете проверить этот идентификатор элемента управления в коллекции Request.Form и что-то сделать с данными?

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