当datetime未由用户填充时传递值null

时间:2014-01-30 10:20:28

标签: asp.net c#-4.0

我创建了一个函数。用户可以选择日期。并且当用户没有选择我要传递null的日期时。

 public DataSet  GetInvoicebyPaging(int pageIndex, int pageSize, Int32 clientId, DateTime  startDate, DateTime  endDate, string invoiceNumber, ref int totalInvoice)
{
 // doing something here 
}

这是我调用函数的代码部分

_orderDAC.GetInvoicebyPaging(pageIndex, grdInvoice.PageSize, clientid, Convert.ToDateTime(txtFirstDate.Text.Trim()), Convert.ToDateTime(txtLastDate.Text.Trim()), txtInvoiceNumber.Text.Trim(), ref invoicecount);

有时候用户无法填充txtFirstDate.Text,但我正在转换Convert.TodateTime(),所以如何解决这个问题,因为当用户没有填写日期时间时,它会给我异常。那我该怎么办呢。

3 个答案:

答案 0 :(得分:1)

您需要将方法更改为:

public DataSet GetInvoicebyPaging(int pageIndex, int pageSize, Int32 clientId, DateTime?  startDate, DateTime  endDate, string invoiceNumber, ref int totalInvoice)
{
    // doing something here 
}

当你解析用户数据时,你可以这样做:

DateTime? start = null;
DateTime possibleStartValue;
if(!string.IsNullOrEmpty(txtTextBox.Text) && DateTime.TryParse(txtTextBox.Text, out possibleStartValue))
{
    start = possibleStartValue;
}

答案 1 :(得分:0)

您可以按如下方式创建可以为空的日期时间变量

DateTime? value = null;

并作为参数传递

在您的功能中,您可以使用DateTime? value作为参数

所以你必须做以下步骤

 DateTime? startDate=txtFirstDate.Text.Trim()==""?null:Convert.ToDateTime(txtFirstDate.Text.Trim());

更改你的函数参数,以便它可以采用如上所述的空值。

答案 2 :(得分:0)

对于您希望能够接受为null的任何日期,例如DateTime startDate,您需要使其像DateTime? startDate

一样可以为空

然后在致电GetInvoicebyPaging之前尝试整理日期时间。

DateTime startDate;
var correctStart = DateTime.TryParse(txtFirstDate.Text.Trim(), out startDate);

然后传递参数

_orderDAC.GetInvoicebyPaging(pageIndex, grdInvoice.PageSize, 
clientid, (correctStart ? startDate : null), etc

您可能必须检查txtFirstDate.Text是否也为空。 在声明startDate之后,您可以执行以下操作:

var dateString = txtFirstDate.Text ?? "";

dateString.Trim()传递到DateTime.TryParse