C# C中的数据绑定日期时间选择器时间
我有一个Windows窗体,有两个datetimepicker控件:一个用于日期,另一个用于时间。这两个控件都绑定到数据库中的同一列,并且控件具有不同的属性名称,即dateEdit和timeEdit,以及不同的格式,即Long和Time 以下是我的问题: timeEdit选择器忽略数据库条目中的任何秒数,并将时间秒数设置为00,如2:34:00,即使此图中修剪为时间的数据库条目为14:34:31.891123-04:00。如何使秒数正确显示? 每当我在timeEdit选择器中将秒从00编辑到例如15,如在2:34:15中,选择器将秒重置为00,然后将值传递给下一个函数。如何传递正确的秒值? 我想编辑时间的毫秒数。使用DATEPART将修剪的毫秒绑定到文本框对我来说最好吗?我是否需要将毫秒转换或强制转换为字符或字符串,以便在文本框中正确显示它们? 谢谢你的帮助 触发编辑表单的代码:C# C中的数据绑定日期时间选择器时间,c#,datetimepicker,C#,Datetimepicker,我有一个Windows窗体,有两个datetimepicker控件:一个用于日期,另一个用于时间。这两个控件都绑定到数据库中的同一列,并且控件具有不同的属性名称,即dateEdit和timeEdit,以及不同的格式,即Long和Time 以下是我的问题: timeEdit选择器忽略数据库条目中的任何秒数,并将时间秒数设置为00,如2:34:00,即使此图中修剪为时间的数据库条目为14:34:31.891123-04:00。如何使秒数正确显示? 每当我在timeEdit选择器中将秒从00编辑到例如
private void timeDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.ColumnIndex == 5)
{
EditTime editForm = new EditTime((Guid)timeDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
editForm.StartPosition = FormStartPosition.CenterScreen;
editForm.ShowDialog();
editForm.Close();
}
}
catch (Exception ex)
{
string msg = "Error: ";
msg += ex.Message;
throw new Exception(msg);
}
}
表格代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace StatusManager
{
public partial class EditTime : Form
{
private Guid calendarId;
public EditTime()
{
InitializeComponent();
}
public EditTime(Guid Id)
{
InitializeComponent();
calendarId = Id;
}
public string GetConnectionString()
{
var connString = ConfigurationManager.ConnectionStrings["StatusManager.Properties.Settings.StatusConnectionString"].ConnectionString;
return connString;
}
private void UpdateCalendarItem(string dateEdit, string timeEdit, string note)
{
var conn = new SqlConnection(GetConnectionString());
const string UpdateStatusSql = @"UPDATE dbo.statuses SET
calendarTime = @timeOffset
notes = @note
WHERE PK_calendarUID = @PK_calendarUID";
try
{
SqlCommand cmd = new SqlCommand(UpdateSql, conn);
var param = new SqlParameter[3];
param[0] = new SqlParameter("@PK_calendarUID", calendarId);
//Convert date(s) to correct format
string dateTimeCombined = dateEdit + " " timeEdit;
DateTime timeConverted = Convert.ToDateTime(dateTimeCombined);
DateTimeOffset timeOffset = new DateTimeOffset(timeConverted);
param[1] = new SqlParameter("@timeOffset", timeOffset);
param[2] = new SqlParameter("@note", note);
foreach (SqlParameter t in param)
{
cmd.Parameters.Add(t);
}
conn.Open();
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
string msg = "Error updating 'calendarItems': ";
msg += ex.Message;
throw new Exception(msg);
}
finally
{
conn.Close();
}
}
private void editTimeButton_Click(object sender, EventArgs e)
{
UpdateCalendarItem(dateEdit.Text, timeEdit.Text, notes.Text);
this.Close();
}
private void EditTime_Load(object sender, EventArgs e)
{
this.locationsTableAdapter.Fill(this.locationsDataSet.locations);
this.calendarTableAdapter.FillById(this.calendarDataSet.calendarItems, calendarId);
}
}
}
用于实例化datetimepicker的代码:
this.timeEdit.CustomFormat = "";
this.timeEdit.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.calendarBindingSource, "calendarTime", true));
this.timeEdit.Format = System.Windows.Forms.DateTimePickerFormat.Time;
this.timeEdit.Location = new System.Drawing.Point(385, 30);
this.timeEdit.Name = "timeEdit";
this.timeEdit.ShowUpDown = true;
this.timeEdit.Size = new System.Drawing.Size(89, 20);
this.timeEdit.TabIndex = 2;
你需要使用
毫秒内不能使用DateTimePicker。问题已解决,但我不确定如何解决。以下是我所做的: 在calendarDataSet中,我更新了两个查询Fill、GetData和FillById、GetDataBy@ID,以选择calendarTime作为CONVERTVARCHAR12,calendarTime,114作为calHoursMinsSec 本质上,我创建了一个包含小时、分钟、秒和毫秒的新列 在表单上,我添加了一个文本框,并将该文本框绑定到Calhoursminsec 注意:我以前尝试将datetime转换为varchar to,但毫无疑问,由于运算符错误,没有成功 一旦我保存了表单,绑定就好像粘住了一样,我能够将相关变量传递给update函数
谢谢大家的意见!感谢您的指导和建议 你能展示你正在使用的代码样本吗。。?另外,您如何实例化dtp控件。根据DateTimePickPerformat,选择时间时使用的格式由您的计算机在Windows的区域和语言设置中设置。您能告诉我们Windows中的短时间和长时间格式是什么吗?另外,您可以尝试将格式设置为自定义格式,并从内存中将其设置为hh:mm:ss未验证格式。@DJKRAZE我是C的新手。dtp控件@SuperOli是什么?我确实尝试过将timeEdit属性设置为自定义和hh:mm:ss tt;我仍然无法获得传递给下一个函数的正确值设置自定义格式不起作用/解决问题:timeEdit选择器不传递秒数。单击表单上的更新按钮时,我可以看到timeEdit选择器在将错误时间(例如,04:15:00而不是04:15:30)传递到下一个函数之前,将选择器中的秒数物理重置为00。很可能在单击更新按钮时重置秒数。尝试将DateTimePicker与简单表单一起使用,看看更新秒时会发生什么。
s The one- or two-digit seconds.
ss The two-digit seconds. Single digit values are preceded by a 0.