如何在c#windows应用程序中将日期数据从datagridview传递到datetimepicker

时间:2016-05-20 12:38:15

标签: c# datagridview datetimepicker

我正在c#windows窗体应用程序中处理datagridview,我正在从数据库加载数据,现在我要编辑单元格值并将值保存到数据库中, 这里我的数据库中有日期和时间。

enter image description here

当我点击datagridview中的行标题时,数据将传输到文本框以及日期时间选择器

enter image description here

数据在文本框中正确复制,但在datetimepicker中复制时会显示错误消息。

代码我完成了。

private void dgvpbx_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            txtname.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
            cmbidentifier.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
            txtplace.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
            txtcity.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString();
            dtpdate.Value = Convert.ToDateTime(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString());
            dtptime.Value = Convert.ToDateTime(dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString());
        }

错误讯息是

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您知道日期和时间在网格中的确切格式,请相应地解析它们:

dtpdate.Value = DateTime.ParseExact(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString(),
    "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture);
dtptime.Value = DateTime.ParseExact(dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString(),
    "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

从截图中,您的两个DateTimePicker控件确实似乎都提供了完整的日期。你可能想要改变这些,所以只选择一个时间而另一个只选择一个日期。

确保将日期和时间放入网格中,使用完全相同的格式将DateTime对象转换为字符串:

(其中i是您当前正在编辑的索引)

dataGridView1.Rows[i].Cells[5].Value = dtpdate.Value.ToString("dd-MM-yyyy");
dataGridView1.Rows[i].Cells[6].Value = dtptime.Value.ToString("HH:mm:ss");

答案 1 :(得分:0)

dtpdate.Value = Convert.ToDateTime(dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString("dd-MM-yyyy"));
dtptime.Value = Convert.ToDateTime(dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString("dd-MM-yyyy"));