如何在datagridview中将日期列更新为自定义格式?-c#
在datagridview中,我显示了MySql数据库中的几个字段 其中一个字段是日期类型。 我在datagridview中将日期列显示为自定义格式,即dd/MM/yyyy如何在datagridview中将日期列更新为自定义格式?-c#,c#,date,datetime,datagridview,C#,Date,Datetime,Datagridview,在datagridview中,我显示了MySql数据库中的几个字段 其中一个字段是日期类型。 我在datagridview中将日期列显示为自定义格式,即dd/MM/yyyy dataGridView1.Columns["DATE"].DefaultCellStyle.Format = "dd/MM/yyyy"; The following exception occurred in the DataGridView System.FormatException: Strin
dataGridView1.Columns["DATE"].DefaultCellStyle.Format = "dd/MM/yyyy";
The following exception occurred in the DataGridView
System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormat dtfi,DateTimeStyles styles)
at System.DateTime.Parse(String s, IFormatProvider provider)
这里我使用CommandBuilder从datagridview更新数据库
当我想要编辑日期列时,我以MM/dd/yyyy格式输入日期。它起作用了
但是我需要从datagridview更新dd/MM/yyyy格式的日期列。
如果这样做,我将从datagridview中获得以下异常
dataGridView1.Columns["DATE"].DefaultCellStyle.Format = "dd/MM/yyyy";
The following exception occurred in the DataGridView
System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormat dtfi,DateTimeStyles styles)
at System.DateTime.Parse(String s, IFormatProvider provider)
如何处理此异常以从datagridview接受日期字符串为“dd/MM/yyyy”
提前谢谢。我的建议是,您必须手动检查每个单元格的格式。使用
CellValueChanged
事件
在你的主课上:
String msg="";
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
string value = dataGridView1.CurrentCell.Value.ToString();
dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["DATE"].Value = trapInputs(value);
MessageBox.Show(msg);
}
public string trapInputs(string value)
{
DateTime val = DateTime.Now;
try
{
val = Convert.ToDateTime(value);
}
catch
{
if (value.Split('/').Length == 3)
{
string[] arr = value.Split('/');
try
{
if (Convert.ToInt32(arr[1]) > Convert.ToInt32(arr[0]))
{
val = Convert.ToDateTime(arr[1] + "/" + arr[0] + "/" + arr[2]);
}
}
catch
{
msg = "Invalid date.";
}
}
else if(value.Split('-').Length==3)
{
string[] arr = value.Split('-');
try
{
if (Convert.ToInt32(arr[1]) > Convert.ToInt32(arr[0]))
{
val = Convert.ToDateTime(arr[1] + "-" + arr[0] + "-" + arr[2]);
}
}
catch
{
msg = "Invalid date.";
}
}
else
{
msg = "Invalid date.";
}
}
value = String.Format("{0:yyyy-MM-dd}", val);
}
在date列中,在datagridview中添加datetimepicker控件,并根据需要更改格式。在这里,我选择将日期格式化为dd/MM/yyyy
//Declare this variable
DateTimePicker dtp = new DateTimePicker(); //DateTimePicker
Rectangle _Rectangle;
public Form1()
{
InitializeComponent();
dtp.Visible = false; //
dtp.Format = DateTimePickerFormat.Custom;
}
private void dtp_TextChange(object sender, EventArgs e)
{
dataGridView1.CurrentCell.Value = dtp.Value.ToString(); //
}
private void dtp_CloseUp(object sender, EventArgs e)
{
dtp.Visible = false;
}
private void button1_Click(object sender, EventArgs e)
{
try
{
connection.ConnectionString = "datasource=localhost;port=3306;username=root;password=root";
string sql = "SELECT * FROM database.table";
dataAdapter = new MySqlDataAdapter(sql, connection);
dataTable = new DataTable();
connection.Open();
dataAdapter.Fill(dataTable);
connection.Close();
dataGridView1.DataSource = dataTable;
dataGridView1.Columns["DATE"].DefaultCellStyle.Format = "dd/MM/yyyy";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 2) // here 2 is the date column in datagridview1
{
dataGridView1.Controls.Add(dtp);
dtp.Value =Convert.ToDateTime(dataGridView1.CurrentCell.Value.ToString());
dtp.CustomFormat = "dd/MM/yyyy"; // change the custom format here to display on the datetimepicker
dtp.TextChanged += new EventHandler(dtp_TextChange); //dtp_TextChange
dtp.Visible = true; //
_Rectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); //
dtp.Size = new Size(_Rectangle.Width, _Rectangle.Height); //
dtp.Location = new Point(_Rectangle.X, _Rectangle.Y); //
dtp.CloseUp+=new EventHandler(dtp_CloseUp);
}
else
dtp.Visible = false;
}
private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
dtp.Visible = false;
}
private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
dtp.Visible = false;
}
这对我来说非常合适。如果您有任何错误,请告诉我。有人能回答我吗。Pleasecell value changed事件不起作用,因为在将日期输入为dd/MM/yyyy并按enter键后,它在datagridview中显示相同的异常。更改回MM/dd/yyyy并按enter键后,cellvaluechanged事件将触发并挂起。请帮助我…您的
日期
列的列类型是什么?如果是typeof(DateTime)
将其更改为typeof(string)
。我真的无法更改。有很多datetime列,它是动态的。我正在从datatable将其绑定到datagridview。是否可以使用相同的日期时间类型。当我得到异常错误时,它告诉我在dataerror事件中处理这个错误。