从 dataGridView 传递日期值时,richTextBox 中的日期格式

Date format in richTextBox, when passing date values from dataGridView

执行了一个简单的 SQL 查询,我表单上的 dataGridView1 确实显示了我数据库的日期和名称列的值,正如预期的那样。 dataGridView1 中的日期以所需的格式显示 ("MM/dd/yyyy")。

接下来,将dataGridView1 的内容传递给richTextBox1。此处(在 richTextBox1 中)的日期值确实以所需的格式(“MM/dd/yyyy”)出现,但是在所有情况下它们还包括 12:00:00 AM 的时间值(例如 2/6/2020 12:00:00上午)。

我想去掉 richTextBox1 中日期值的这个时间部分。我知道我必须以某种方式为 richTextBox1 中的列日期(dataGridView1 的第一列)的值声明所需的格式,但到目前为止还没有成功。有什么建议吗?

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = SelectData();

            richTextBox1.Text = "REPORT \n\n";

            for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
            {
                richTextBox1.Text = richTextBox1.Text + "-";

                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    richTextBox1.Text = richTextBox1.Text + "\t" + dataGridView1.Rows[i].Cells[j].Value.ToString() + "\t";
                }
                richTextBox1.Text = richTextBox1.Text + "\n";
            }
        }
        
        private DataTable SelectData()
        {
            DataTable dtSelectData = new DataTable();

            using (MySqlConnection con = new MySqlConnection(connString))
            {
                using (MySqlCommand cmd = new MySqlCommand("SELECT date, name FROM person", con))
                {
                    try
                    {
                        con.Open();
                        MySqlDataReader reader = cmd.ExecuteReader();
                        dtSelectData.Load(reader);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Database Message:\n" + ex.Message);
                    }
                    finally
                    {
                        con.Close();
                    }
                }
            }
            return dtSelectData;
        }

替换

dataGridView1.Rows[i].Cells[j].Value.ToString() 

dataGridView1.Rows[i].Cells[j].Value.ToString("MM/dd/yyyy")

为了防止时间。

要格式化来自 dataGridView1 单元格的日期,您可以将单元格的值 (object) 转换为 DateTime 类型,然后在其上使用 ToString("Some DateTime Format")

安全简单的转换方法是结合检查,单元格值是 DateTime 类型,如果是,则将其转换为 DateTime 类型。可以使用 is operator:

来完成
if (dataGridView1.Rows[i].Cells[j].Value is DateTime dt) { ... }

它调用模式匹配,你可以在MSDN上阅读它。 因此,如果条件为 true(这意味着单元格值属于 DateTime 类型)- 您可以使用 dt 变量值和 ToString("SomeFormat") 来根据需要格式化值:

for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
    object cellValue = dataGridView1.Rows[i].Cells[j].Value;

    if (cellValue is DateTime dt)
        richTextBox1.Text += "\t" + dt.ToString("MM/dd/yyyy") + "\t";
    else
        richTextBox1.Text += "\t" + cellValue?.ToString() + "\t";
}

在测试中,这种方式看起来不错: