public partial class F_SKTZD : Form
{
public static char pd;//保存时判断新增还是修改
public F_SKTZD()
{
InitializeComponent();
}
public F_SKTZD(单据表 djb) //定义子窗体带参数的窗体构造函数
{
InitializeComponent();
if (pd == 'K' || pd == 'U')
{
this.textBox单据编号.Text = djb.单据编号;
this.dateTimePicker1.Value = Convert.ToDateTime(djb.单据日期);
this.comboBox收款单位.Text = djb.业务单位;
this.textBox收款账户.Text = djb.业务账户;
this.textBox收款账号.Text = djb.业务账号;
this.textBox收款开户行.Text = djb.账号开户行;
this.textBox往来单位.Text = djb.往来单位;
this.textBox付款账户.Text = djb.往来账户;
this.textBox付款账号.Text = djb.往来账号;
this.textBox付款开户行.Text = djb.往来开户行;
this.comboBox结算方式.Text = djb.结算方式;
this.textBox用途.Text = djb.用途;
this.textBox备注.Text = djb.备注;
this.textBox制单人.Text = djb.制单人;
this.textBox审核人.Text = djb.审核人;
}
if (pd == 'I')
{
this.textBox收款账户.Text = djb.业务账户;
this.textBox收款账号.Text = djb.业务账号;
this.textBox收款开户行.Text = djb.账号开户行;
}
}
父窗体的修改按钮代码 :
private void 修改_Click(object sender, EventArgs e)
{
if (this.dataGridView1.SelectedRows.Count != 0) //判断是否选中行
{
F_Form.F_SKTZD.pd = 'U';//修改标志
单据表 djb = new 单据表(); // 重载子窗体的构造函数
djb.单据编号 = this.dataGridView1.CurrentRow.Cells[2].Value.ToString();
djb.单据日期 = Convert.ToDateTime(this.dataGridView1.CurrentRow.Cells[1].Value.ToString());
djb.业务单位 = this.dataGridView1.CurrentRow.Cells[3].Value.ToString();
djb.业务账户 = this.dataGridView1.CurrentRow.Cells[4].Value.ToString();
djb.业务账号 = this.dataGridView1.CurrentRow.Cells[5].Value.ToString();
djb.账号开户行 = this.dataGridView1.CurrentRow.Cells[6].Value.ToString();
djb.往来单位 = this.dataGridView1.CurrentRow.Cells[7].Value.ToString();
djb.往来账户 = this.dataGridView1.CurrentRow.Cells[8].Value.ToString();
djb.往来账号 = this.dataGridView1.CurrentRow.Cells[9].Value.ToString();
djb.往来开户行 = this.dataGridView1.CurrentRow.Cells[10].Value.ToString();
djb.结算方式 = this.dataGridView1.CurrentRow.Cells[11].Value.ToString();
djb.用途 = this.dataGridView1.CurrentRow.Cells[14].Value.ToString();
djb.备注 = this.dataGridView1.CurrentRow.Cells[15].Value.ToString();
djb.制单人 = this.dataGridView1.CurrentRow.Cells[16].Value.ToString();
djb.审核人 = this.dataGridView1.CurrentRow.Cells[17].Value.ToString();
F_Form.F_SKTZD ff = new F_Form.F_SKTZD(djb);//调用子窗体带参数的构造函数
ff.ShowDialog();
}
else
MessageBox.Show("请选中一行要修改的记录");
}
每当运行到有空值的地方提示
5 个解决方案
#1
对传入的数据先进行非空验证,然后再进行下一步工作
#2
问题是 实际情况确实需要传递空值,有值的时候传递值,无值的时候传递空值
#3
把 djb.备注 = this.dataGridView1.CurrentRow.Cells[15].Value.ToString();
改成djb.备注 = Convert.ToString(this.dataGridView1.CurrentRow.Cells[14].Value);
问题解决
原因是如果使用了.ToString()就必须保证前面的值不为空才能转换,如果为空就永远报错。
改成djb.备注 = Convert.ToString(this.dataGridView1.CurrentRow.Cells[14].Value);
问题解决
原因是如果使用了.ToString()就必须保证前面的值不为空才能转换,如果为空就永远报错。
#4
参考这样写:
DateTime _temp_time = DateTime.MinValue;
DateTime _TheTrueTime = DateTime.TryParse(_current_time.Trim(), out _temp_time) == true ? _temp_time : DateTime.MinValue;
if (_TheTrueTime.CompareTo(DateTime.MinValue) != 0)
{
}
其他的int.TryParse,double.Tryparse,也是类似的。
这样的写法。好处是永远都不会报错。
#5
xxx=this.dataGridView1.CurrentRow.Cells[2].Value?.ToString()??string.Empty;
#1
对传入的数据先进行非空验证,然后再进行下一步工作
#2
问题是 实际情况确实需要传递空值,有值的时候传递值,无值的时候传递空值
#3
把 djb.备注 = this.dataGridView1.CurrentRow.Cells[15].Value.ToString();
改成djb.备注 = Convert.ToString(this.dataGridView1.CurrentRow.Cells[14].Value);
问题解决
原因是如果使用了.ToString()就必须保证前面的值不为空才能转换,如果为空就永远报错。
改成djb.备注 = Convert.ToString(this.dataGridView1.CurrentRow.Cells[14].Value);
问题解决
原因是如果使用了.ToString()就必须保证前面的值不为空才能转换,如果为空就永远报错。
#4
参考这样写:
DateTime _temp_time = DateTime.MinValue;
DateTime _TheTrueTime = DateTime.TryParse(_current_time.Trim(), out _temp_time) == true ? _temp_time : DateTime.MinValue;
if (_TheTrueTime.CompareTo(DateTime.MinValue) != 0)
{
}
其他的int.TryParse,double.Tryparse,也是类似的。
这样的写法。好处是永远都不会报错。
#5
xxx=this.dataGridView1.CurrentRow.Cells[2].Value?.ToString()??string.Empty;