VBNet.Su - Visual Basic .NET. ASP .NET. Framework .NET.
Список форумов
Web Forms (ASP .NET)

Как сделать валидатор календаря?

Быстрый переход:
Web Forms (ASP .NET) / Visual Basic .NET 2005 (Framework 2.0) (ссылка)18 декабря 2008 / 16:10
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


Это первый пост :)
Поэтому, на него надо ответить по-любому, ибо не пруха будет и дальше. :) Шучу.

А вот и вопрос:
В DetailsView в одном из полей выставлен Calendar. Дело в том, что когда создаёшь новую запись в БД через кнопку "New" DetailsView'a, а поле(datetime) в БД забиндено(Bind) к календарю и не может пустовать. Так вот, если не выбрана дата в календаре, страница вываливается в ошибку.
Валидаторов, на то, выбрана ли дата в календаре - нет.
Как добится проверки, выбрана ли дата? Думал, сделать около календаря скрытый текстбокс, куда бы выгружалась дата, но беда в том, что в коде эти контролы не видны. Так как находятся в ItemTemplate DataView'a.
Комментарий #1 (ссылка)18 декабря 2008 / 16:29
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


Незнаю, как предыдущий пост отредактить, посему вдогонку ещё одно мнение:
может надо обрабатывать sender при сохранении записи в базу в этом событии:
  1. Protected Sub DetailsView1_ItemInserting(ByVal sender As Object,...


но можно ли в sender'e получить свойства контрола(календарь) если он в ItemeTempate вставлен?
Комментарий #2 (ссылка)18 декабря 2008 / 16:58
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


kibernetics пишет:
Как добится проверки, выбрана ли дата?

Можно:
1. Проверить дату на стороне сервера.
или
2. Установить взранее значение SelectedDate.

kibernetics пишет:
может надо обрабатывать sender при сохранении записи в базу в этом событии:

Нужный контрол можно найти через DetailsView1.FindControl оп ID.
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #3 (ссылка)18 декабря 2008 / 18:30
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


спасибо алексей!

в общем, я решил предварительно выставлять SelectedDate
но теперь иная проблема, не могу сохранить в бд в поле datetime дату
как ни форматировал строчку, постоянно ошибки.
незнаю, почему-то если
  1. calendar1.SelectedDate = #12/18/2008#

то при форматировании
  1. Format(calendar1.SelectedDate, "yyyymmdd")

выдаёт 20080018. Что тут к чему, не пойму.
Как правильно отформатить-то, чтоб сохранится?
Комментарий #4 (ссылка)19 декабря 2008 / 02:57
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


mm - это минуты smile
Now.ToString("dd.MM.yyyy") - 19.12.2008

А какой код сохранения? И какую ошибку выдает?
По идеи форматировать даты перед записью не нужно.
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #5 (ссылка)19 декабря 2008 / 07:44
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


SQL ест строку '20081219' ето даже в запросах прокатывает формат будет "yyyyMMdd" хотя должен он дату без форматирования есть %)
kibernetics пишет:
calendar1.SelectedDate = #12/18/2008#

попробуй здесь указать системную дату.... типа
  1. My.Computer.Clock.LocalTime.Date

..и было сказано:
Не согласен(а): Алексей Немиро
Комментарий #6 (ссылка)19 декабря 2008 / 07:51
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


Kolyasik пишет:
My.Computer

в ASP .NET компьютер как бы не совсем "My", могут возникнуть проблемы с правами smile
Получить системную дату можно либо чере vb-функцию Now, либо через свойство Today объекта DateTime (DateTime.Today).
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #7 (ссылка)19 декабря 2008 / 10:44
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


Народ, да фигня какая-то... я уже в полном ах...
вот код:
  1. Protected Sub Button7_Click(ByVal sender As Object, ByVal e As System.EventArgs)
  2.  
  3.         Dim strSql As String
  4.         Dim objConn As SqlConnection
  5.         Dim objCmd As SqlCommand
  6.  
  7.         Dim cal As Calendar = DirectCast(DetailsView1.FindControl("Calendar2"), Calendar)
  8.         Dim txt As TextBox = DirectCast(DetailsView1.FindControl("TextBox2"), TextBox)
  9.  
  10.         If cal.SelectedDate = #12:00:00 AM# Then
  11.             cal.SelectedDate = Format(Today(), "ddMMMyyyy")
  12.         End If
  13.  
  14.         If Page.IsValid Then
  15.             objConn = New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=Halta;Integrated Security=True")
  16.             objConn.Open()
  17.             Dim strName = txt.Text.Trim()
  18.  
  19.             strSql = "INSERT INTO Monitoring (ClientName, ChangeDate, Changing) " _
  20.                    & "VALUES ('" & strName & "', #" & Format(cal.SelectedDate, "yyyyMMdd") & "#, 'True')"
  21.  
  22.             objCmd = New SqlCommand(strSql, objConn)
  23.             objCmd.ExecuteNonQuery()
  24.             objConn.Close()
  25.         End If
  26.  
  27.     End Sub


всё равно кричит, что с датой:
The name "#20081219#" is not permitted in this context.
Valid expressions are constants, constant expressions, and (in some contexts) variables.
Column names are not permitted.
Комментарий #8 (ссылка)19 декабря 2008 / 11:01
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


kibernetics пишет:
strSql = "INSERT INTO Monitoring (ClientName, ChangeDate, Changing) " _
& "VALUES ('" & strName & "', #" & Format(cal.SelectedDate, "yyyyMMdd") & "#, 'True')"

так лучше не делать, это прошлый век smile
  1. strSql = "INSERT INTO Monitoring (ClientName, ChangeDate, Changing) " & _
  2.                 "VALUES (@ClientName, @ChangeDate, @Changing)"
  3. objCmd = New SqlCommand(strSql, objConn)
  4. objCmd.Parameters.Add("@ClientName", SqlDbType.NVarChar).Value = strName
  5. objCmd.Parameters.Add("@ChangeDate", SqlDbType.DateTime).Value = cal.SelectedDate
  6. objCmd.Parameters.Add("@Changing", SqlDbType.Bit).Value = True
  7. objCmd.ExecuteNonQuery()
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #9 (ссылка)19 декабря 2008 / 11:07
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


kibernetics пишет:
If cal.SelectedDate = #120000 AM# Then
cal.SelectedDate = Format(Today(), "ddMMMyyyy")
End If

эта строчка кода тоже сомнительная.
Возможно:
  1. If cal.SelectedDate Is Nothing Then cal.SelectedDate = Now

либо проверить дату через DateDiff или TimeSpan..
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #10 (ссылка)19 декабря 2008 / 13:00
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


зачем при указании даты в тексте запроса указываешь символ решетки по краям? ты на SQL пробовал етот запрос? там указывать нада в одинарных кавычках... а еще ИМХО нада использовать хранимые процедуры, тогда вообще проблем не будет
Комментарий #11 (ссылка)19 декабря 2008 / 15:44
kibernetics
Пользователь
ку 16.0390645+

вопросов: 6
советов: 0
ответов: 2
комментариев: 17


Всё круто!
Работает.
Народ, спасибо! smile
..и было сказано:
Пиши еще!: Алексей Немиро
Страницы:    < назад    ·    вперед >
1
Зарегистрируйтесь, чтобы иметь возможность участвовать в жизни форума.