【问题标题】:Format DateTime in DataGridView在 DataGridView 中格式化 DateTime
【发布时间】:2017-05-29 07:36:33
【问题描述】:

我知道这是一个老问题,但我不知道为什么。

我在 2 个按钮 GENERATESAVE 中有 2 个 void 绑定:

private void btn_generate_Click(object sender, EventArgs e) 
{
        DateTime startdate = Convert.ToDateTime(textstarteddate.Text);
        DateTime enddate = new DateTime (startdate.Year, 12, 31);
        Int64 addedDays = Convert.ToInt64(textdaycount.Text);
        string taskID = texttaskID.Text;
        string machine = cb_machineID.Text.Trim();
        string note = texttasknote.Text;
        string runningtime = RMT.Text;
        string period = cb_periodID.Text.Trim();
        _dtdate.Columns.Add(new DataColumn("Maintenance Date", typeof(DateTime)));
        _dtdate.Columns.Add(new DataColumn("TaskID", typeof(String)));
        _dtdate.Columns.Add(new DataColumn("Machine", typeof(String)));
        _dtdate.Columns.Add(new DataColumn("Note", typeof(String)));
        _dtdate.Columns.Add(new DataColumn("Period", typeof(String)));
        _dtdate.Columns.Add(new DataColumn("Running Time", typeof(String)));
        _dtdate.Rows.Clear();
        G1.DataBindings.Clear();
        if (cb_typescheID.Text == "Fix Date")
        {
            do
            {
                _dtdate.Rows.Add(startdate.Date, taskID, machine, note, period);
                startdate = startdate.AddDays(addedDays);
                G1.Refresh();
                //DateTime end = startdate;
            }
            while (startdate <= enddate);
        }
        G1.DataSource = _dtdate;
        G1.Columns["Maintenance Date"].DefaultCellStyle.Format = "d";
}

private void btn_save_Click(object sender, EventArgs e)
{
 if (cb_typescheID.Text == "Fix Date")
                {
                    foreach (DataRow dr in _dtdate.Rows)
                    {                          
                        sqlstr = sqlstr + " INSERT INTO [PerformTask] (Year, Date, TasKID, MachineID, PerformStatus, ScheduleID, PeriodID) Values ('" + startdate.Year + "', '" + dr["Maintenance Date"].ToString() + "',";               
                        sqlstr = sqlstr + "'" + texttaskID.Text.Trim() + "', '" + machine + "', 'RS_Open', '" + typeschedule + "', '" + period + "')";
                        G1.Columns["Maintenance Date"].DefaultCellStyle.Format = "d";

                    }
                }
}

我尝试了各种方法将其仅转换为日期 (dd/MM/yyyy),但它仍显示在 DataGridView(G1) 上,但当我尝试将其保存到 SQL 中的数据表中时,其格式仍为“dd/ MM/yyyy hh:mm:ss tt" 无论我如何转换它。我已阅读有关此问题的旧主题,尝试了他们的方法,但仍然无法以我想要的方式保存数据。

请帮忙。谢谢你。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    您可以将列添加为字符串:

    _dtdate.Columns.Add(new DataColumn("Maintenance Date", typeof(String)));
    

    然后在添加新行时格式化日期:

    _dtdate.Rows.Add(startdate.Date.ToString("dd/MM/yyyy"), taskID, machine, note, period);
    

    【讨论】:

    • 谢谢,它成功了,只是添加信息,而不是startdate.Date.ToString("dd/MM/yyyy"),你可以使用startdate.Date.ToShortDateString()
    【解决方案2】:

    如果我理解正确,您的问题不是在网格中以日期格式显示日期,而是与 SQL 中的格式有关? 您的数据库字段是日期还是日期时间(假设我们是 MS SQL Server)?如果您不需要时间信息,最好将字段更改为日期。最好将日期存储为日期而不是字符串,因为您可以将它们作为日期执行操作,而无需强制转换。一般来说,您永远不应该关心数据库格式化值的方式。由您的表示层来处理格式;您的数据库应该只关注数据的有效存储,而不必担心数据的外观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多