我遇到返回空文本值导致错误的问题,“ 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;
}
答案 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更简单...