c#中的DateTime抛出异常指定的强制转换无效

时间:2012-09-10 06:43:31

标签: c# sql-server-2008

private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        try
        {
            if ((dataGridView1.Focused) && (dataGridView1.CurrentCell.ColumnIndex == 0))
            {
                dtpInstallment.Location = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Location;
                dtpInstallment.Visible = true;
                if (dataGridView1.CurrentCell.Value != DBNull.Value)
                {
                   // dtpInstallment.Value = DateTime.Today;
                   dtpInstallment.Value = (DateTime)dataGridView1.CurrentCell.Value;

               //     DateTime date = (DateTime)dataGridView1.CurrentCell.Value;
                 //   dtpInstallment.Value = DateTime.Parse(date.ToString("dd/MM/yyyy"));


                }
                else
                {
                    dtpInstallment.Value = DateTime.Today;
                }
            }
            else
            {
                dtpInstallment.Visible = false;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
  

在这个日期时间抛出异常...... dataGridView1.CurrentCell.Value中有值。但是无法转换为dtpInstallment.value,即DateTimePicker

3 个答案:

答案 0 :(得分:2)

这是因为您正在解析的值不是正确的格式。尝试使用ParseExact

string poop = "2005-12-14 23:12:34";
string currentFormat = "yyyy-MM-dd HH:mm:ss";
DateTime poo = DateTime.ParseExact(poop, currentFormat, System.Globalization.CultureInfo.InvariantCulture);
// yyyy-MM-dd HH:mm:ss ==> you can change the format that matches the current
//                         value of your dataGridView1.CurrentCell.Value

答案 1 :(得分:1)

单元格中的值不是有效日期。也许尝试DateTime.TryParse。这样,如果DateTime是有效格式,您将获得DateTime,如果不是,则不会出现异常。

答案 2 :(得分:0)

由于您检查了DBNull.Value,我猜您使用SqlDataSource检索数据,并且您的日期时间值实际上是SqlDateTime类型。