Вы можете сделать это с небольшим количеством js и css. Я бы лично избегал причин появления элементов прогресса, связанных с кросс-браузерным стилем.
Сторонние библиотеки хороши, но они идут со значительной стоимостью. Раздутые CSS и JS иногда не стоят этого.
Надеюсь, это поможет.
<style>
.progress {
width: 100%;
position: relative;
background-color: orange;
}
.bar {
width: 0%;
height: 30px;
background-color: green;
text-align: center;
line-height: 30px;
color: black;
}
.bar-text {
position: absolute;
top: 0;
width: 100%;
height: 30px;
text-align: center;
line-height: 30px;
color: black;
}
</style>
<script>
function init() {
var bar = document.getElementById("bar");
var width = 0;
var id = setInterval(frame, 10);
function frame() {
if (width >= 100) {
clearInterval(id);
} else {
width++;
bar.style.width = width + '%';
document.querySelector('.bar-text').innerHTML = width * 1 + '%';
}
}
}
</script>
<div class="progress" id="progress">
<div class="bar" id="bar"></div>
<div class="bar-text">10%</div>
</div>
<br>
<button onclick="init()">Click Me</button>
Вы не можете сделать этого с атрибутом, потому что они - просто метаинформация, сгенерированная во время компиляции. Просто добавьте код к конструктору, чтобы инициализировать дату при необходимости, создать триггер и обработать отсутствующие значения в базе данных или реализовать метод считывания способом, что это возвращает DateTime. Теперь, если отступающее поле не инициализируется.
public DateTime DateCreated
{
get
{
return this.dateCreated.HasValue
? this.dateCreated.Value
: DateTime.Now;
}
set { this.dateCreated = value; }
}
private DateTime? dateCreated = null;
Как Вы имеете дело с этим, в данный момент зависит, на какой модели Вы используете Linq для SQL или EntityFramework?
В L2S можно добавить
public partial class NWDataContext
{
partial void InsertCategory(Category instance)
{
if(Instance.Date == null)
Instance.Data = DateTime.Now;
ExecuteDynamicInsert(instance);
}
}
EF немного более сложен, см. http://msdn.microsoft.com/en-us/library/cc716714.aspx для большего количества информации о EF buisiness логика.
public DateTime DateCreated
{
get
{
return (this.dateCreated == default(DateTime))
? this.dateCreated = DateTime.Now
: this.dateCreated;
}
set { this.dateCreated = value; }
}
private DateTime dateCreated = default(DateTime);
Я также хотел этого и придумал это решение (я использую только часть даты - время по умолчанию не имеет смысла по умолчанию в PropertyGrid):
public class DefaultDateAttribute : DefaultValueAttribute {
public DefaultDateAttribute(short yearoffset)
: base(DateTime.Now.AddYears(yearoffset).Date) {
}
}
Это просто создает новый атрибут, который вы можете добавить в свой Свойство DateTime. Например. если по умолчанию используется DateTime.Now.Date:
[DefaultDate(0)]