从 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";
}
在测试中,这种方式看起来不错:
执行了一个简单的 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";
}
在测试中,这种方式看起来不错: