Если вы используете эту функцию для генерации версии HTML5 datepicker для браузеров, формат даты должен быть yyyy-MM-dd
(формат ISO). Используя TextBoxFor()
, он должен быть
@Html.TextBoxFor(m => m.InitialDate, "{0:yyyy-MM-dd}", new { @class = "form-control", type = "date" })
. В качестве альтернативы добавьте следующие атрибуты к свойству
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> InitialDate { get; set; }
и в представлении используйте
@Html.EditorFor(m => m.InitialDate)
Обратите внимание, что это добавляет атрибут type="date"
Мы не знаем, какой класс newrow
. Для этого я буду использовать идентификатор RowClass
.
(например, RowClass = newrow.__class__
)
Идея состоит в том, чтобы создать словарь с целыми числами в качестве ключей и функциями для вызова в качестве значений и найти функцию со значением по умолчанию setDouble
newrow
и объектную нотацию, что потребует перестройки словаря при каждом новом значении newrow
.
calldict = {
15 : RowClass.setCharString,
7 : RowClass.setInteger,
11 : RowClass.setBoolean,
12 : lambda self,i,r : RowClass(self,i,r.year,r.month,r.day) # special case to match 2 arguments
# same principle for others, of course
}
ваш цикл с добавлением, сначала поиск функции, затем вызов функции:
while row is not None:
for i in range(0,colCount):
if row[i] is not None:
# look up the function
function_to_call = calldict.get(i,RowClass.setDouble)
# call the function, passing the object as first argument:
function_to_call(newrow,i,row[i])