日期不接受空值



我正在创建一个网格视图,允许用户输入特定工件的日期(例如完成日期((有多个(。如果我试图输入一个null或空值,它会崩溃。我到处寻找答案。他们输入的数据将更新到sql server数据库中。我已经在date和nvarchar之间来回切换了数据。此外,该值必须绑定,以便更新ASP.net中的数据库。

代码ASP.NET

<asp:TemplateField HeaderText="Verify Info Prod & Maturity Level" SortExpression="IPMaturity">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("IPMaturity") %>' Width="75"></asp:TextBox>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" Text="Complete" Checked='<%# Bind ("CheckBox1") %>'></asp:CheckBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblIPMat" runat="server" Text='<%# Eval("IPMaturity") %>' Width="75"></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="verticaltext" Height="140px" Width="88px" HorizontalAlign="Center" VerticalAlign="Bottom" />
</asp:TemplateField>

代码C#

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DateTime date1 = Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "IPMaturity"));
if (date1 >= DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.White;
if (date1 < DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.Red;
}
}

您可能正在寻找一个可为null的DateTime:DateTime?

System.DateTime类型是值类型,因此不允许为null。Nullable类允许将值设置为null

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string ipMaturity = DataBinder.Eval(e.Row.DataItem, "IPMaturity");
DateTime? date1 = !string.IsNullOrEmpty(ipMaturity) ?  Convert.ToDateTime(ipMaturity) : (DateTime?)null;
if (date1.HasValue && date1 >= DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.White;
if (date1.HasValue && date1 < DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.Red;
}
}

既然我们使用了可为null的DateTime,那么if语句将被更新以检查null,从而在提供值之前避免设置背景色。

我对DataBinder.Eval不太熟悉,所以如果没有返回string,我很抱歉,但希望DateTime?能让你朝着正确的方向前进。

如果需要将null保存为数据库中的值,则数据库中的字段也需要为null。

我没有必要的项目来测试它,但我认为If语句测试它的null会起作用。如果这不起作用,我会使用try/catch,我也把它放在下面。如果你知道正在抛出的异常,那么抓住它就太好了。

如果代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.DataItem != null)
{
DateTime date1 = Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "IPMaturity"));
if (date1 >= DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.White;
if (date1 < DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.Red;
}else
{
// Data was null, so do something?
}
}
}

Try/Catch代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DateTime date1 = Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "IPMaturity"));
if (date1 >= DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.White;
if (date1 < DateTime.Now)
e.Row.Cells[4].BackColor = System.Drawing.Color.Red;
}
}
catch
{
// Gracefully handle the exception here
}
}

相关内容

  • 没有找到相关文章

最新更新