从文本框中返回空日期值

时间:2019-07-13 05:53:06

标签: c#

我遇到返回空文本值导致错误的问题,“ System.InvalidCastException:'无法将对象从DBNull强制转换为其他类型。”我正在从WPF中的列表框提取数据,并在列表框中返回数据,可以进行编辑和保存。 ShippedDate需要接受Null值,但是每当我尝试选择没有值的行时,它就会崩溃。

这是我目前拥有的代码。 else部分完全按照我想要的方式工作,但是我迷失于如何处理null的问题。我感谢任何建议。

#include<stdio.h>
#include<stdlib.h>
struct node
{
        int data;
        struct node* link;
};
struct node* root = NULL;
void append()
{
        struct node* temp;
        temp=(struct node*)malloc(sizeof(struct node));
        printf("Enter The Node Value: ");
        scanf("%d",&temp->data);
        temp->link=NULL;
        if(root = NULL)
        {
                root = temp;
        }
        else
        {
                struct node* p;
                p = root;
                while(p->link != NULL)
                {
                        p=p->link;
                }
                p = temp;
        }
}
int main()
{
        printf("Add A Node To The Structure:-\n");
        while(1)
        {
                int ch;
                printf("Enter 2 To Exit\n");
                printf("Enter Your Choice:");
                scanf("%d",&ch);
                switch(ch)
                {
                        case 2: exit(0);
                        default:append();
                }
        }
        return 0;
}

2 个答案:

答案 0 :(得分:1)

System.InvalidCastException 是从代码的这一部分生成的

Convert.ToDateTime(OrderDataTable.Rows[0]["ShippedDate"]);

您需要对照OrderDataTable.Rows[0]["ShippedDate"]检查DBNull,如果没有,请不要用它调用Convert.ToDateTime,为您的代码进行更改:

if (shippedDate.Text == null)

收件人:

if (OrderDataTable.Rows[0]["ShippedDate"] == DBNull)

尝试一下。

答案 1 :(得分:1)

我的第一个想法是,使用DatePicker会更容易,因为这将消除大多数格式问题。但是,它不会影响您的null问题。

关于您的null问题,无论在TextBox还是if部分,我都没有看到更改else文本的任何理由。相反,我会做这样的事情:

if (string.IsNullOrWhiteSpace(shippedDate.Text) == false)
{
    // Be careful with the naming, you don't want it to be confused with the TextBox
    DateTime sd;
    bool didParse = DateTime.TryParse(shippedDate.Text, out sd);

    if (didParse) 
    {
        // Do stuff with the date (sd)
    }
    else 
    {
        // Maybe show a warning/error
        shippedDate.Text = null;
    }
}

同样,使用DatePicker更简单...