首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将日期从DataGridView提取到DateTimePicker

将日期从DataGridView提取到DateTimePicker
EN

Stack Overflow用户
提问于 2021-09-18 07:47:26
回答 2查看 58关注 0票数 0

在这里,当我在我的datagridview中选择一行时,我希望数据库中的日期显示在我的应用程序中的DateTimePicker上。

但是我遇到了一个错误,它告诉我'String was not recognized as a valid DateTime.'

因为MySQL采用'yyyy-MM-dd'格式,所以我将我的DateTimePicker格式改为相同的格式。

我尝试以字符串的形式提取DataGridView的值,发现得到的格式是"dd-MM-yyyy hh:MM:ss t"

我能做些什么来解决这个问题?

代码语言:javascript
运行
复制
private void dtv_dis1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        txt_id.Text = dtv_dis1.SelectedRows[0].Cells[0].Value.ToString();
        txt_amt.Text = dtv_dis1.SelectedRows[0].Cells[6].Value.ToString();
        txt_remarks.Text = dtv_dis1.SelectedRows[0].Cells[5].Value.ToString();
        //Error with date
        String date = dtv_dis1.SelectedRows[0].Cells[1].Value.ToString();
        dtp_date.Value = DateTime.ParseExact(date, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
        //textBox1.Text = dtv_dis1.SelectedRows[0].Cells[1].Value.ToString();

        tot = dtv_dis1.SelectedRows[0].Cells[2].Value.ToString();
        mop = dtv_dis1.SelectedRows[0].Cells[4].Value.ToString();
        cur = dtv_dis1.SelectedRows[0].Cells[3].Value.ToString();
        if (tot == "Domestic")
        {
            rb_dom.Checked = true;
        }
        else
        {
            rb_in.Checked = true;
        }
        if (mop == "Cash")
        {
            rb_csh.Checked = true;
        }
        else if (mop == "Credit Card")
        {
            rb_cc.Checked = true;
        }
        else
        {
            rb_nb.Checked = true;
        }
        if (cur == "Doller")
        {
            rb_doller.Checked = true;
        }
        else if (cur == "Euro")
        {
            rb_euro.Checked = true;
        }
        else
        {
            rb_Rupees.Checked = true;
        }

    }
EN

回答 2

Stack Overflow用户

发布于 2021-09-18 08:16:24

如果网格数据源是DataTable,而“date”列的类型是DateTime,则不需要“解析”日期…

只需从数据源获取" data“行,然后直接从单元格…获取DateTime值像…这样的东西

代码语言:javascript
运行
复制
if (dtv_dis1.CurrentRow != null) {
    DataRowView drv = (DataRowView)dtv_dis1.CurrentRow.DataBoundItem;
    dtp_date.Value = (DateTime)drv["Date"];
}

如上所述,如果列类型是string类型…那么我建议您将其更改为一种DateTime类型。

票数 0
EN

Stack Overflow用户

发布于 2021-09-18 11:37:25

建议将数据库数据加载到 DataTable List 中,然后使用BindingSource分配DataTable或List。

DataBinding添加到DataTimePicker,将Format属性设置为自定义,将CustomFormat设置为yyyy-MM-dd。

如果使用列表并希望反映DataGridView中的更改,请在表示T的类中实现INotifyPropertyChanged接口。

List和BindingSource有一个怪癖,可以反映对源的更改,因此可以订阅DateTimePicker的ValueChanged事件并设置DateTime列值。

下面的屏幕截图显示了带有自定义DataGridView列的DataGridView中显示的日期,其中出生日期与DateTimePicker同步。

通常,人们不希望通过单元格访问DataGridView中的数据,而是通过上述BindingSource中的DataSource来访问。

要通过BindingSource获取DataGridView中的当前行,首先断言.Current属性is not null,如果不为空,则当前类型为e.case。DataTable的DataRow,列表的类类型。

下面的DataSource是一个使用Person1类从上面显示的DataGridView中获取当前行信息的列表。

代码语言:javascript
运行
复制
private void CurrentPersonButton_Click(object sender, EventArgs e)
{

    if (_bindingSource is null || _bindingSource.Current is null) return;

    var current = (Person1)_bindingSource.Current;

    MessageBox.Show(
        $"{current.FirstName} {current.LastName}\n" + 
        $"{current.BirthDate.Value:yyyy-MM-dd}");
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69232670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档