![](/img/trans.png)
[英]How to get the value of date cell datagridview into the datetimepicker?
[英]If condition with datetimepicker & datagridview cell date
我是C#编程的新手,我缺乏编码知识。 所以请帮帮我。
我有datagridview(以下简称dgv),没有绑定到任何数据源。 dgv从表单上的一些文本框和datetimepicker(以下称dtp)提供数据。 我想在用户输入数据到dgv之前检查if条件。 请看下面的代码,
private void FEAdd_Click(object sender, EventArgs e)
{
var boxes = new List<TextBox>
{
MtrtextBox1,
PltrtextBox11,
BvtextBox12,
};
if (boxes.Any(tb => string.IsNullOrEmpty(tb.Text)))
{
MessageBox.Show("Fill required fields", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
MtrtextBox1.BackColor = Color.Red;
BvtextBox12.BackColor = Color.Red;
}
else if (dgvFE.RowCount >= 1 && (Convert.ToDateTime(dgvFE.Rows[dgvFE.RowCount - 1].Cells[0].Value.ToString()) > dateTimePicker1.Value.Date))
{
MessageBox.Show("Current bill date cannot be less than the previous bill date.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
int n = dgvFE.Rows.Add();
dgvFE.Rows[n].Cells[0].Value = dateTimePicker1.Value.ToString("dd-MM-yyyy");
dgvFE.Rows[n].Cells[1].Value = MtrtextBox1.Text.ToString();
dgvFE.Rows[n].Cells[3].Value = PltrtextBox11.Text.ToString();
dgvFE.Rows[n].Cells[4].Value = BvtextBox12.Text.ToString();
foreach (DataGridViewRow row in dgvFE.Rows)
{
dgvFE.Rows[row.Index].Cells[2].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index].Cells[4].Value.ToString()) / Double.Parse(dgvFE.Rows[row.Index].Cells[3].Value.ToString())), 2).ToString();
if (n >= 1 && row.Index > 0)
{
dgvFE.Rows[row.Index - 1].Cells[5].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index].Cells[1].Value.ToString()) - Double.Parse(dgvFE.Rows[row.Index - 1].Cells[1].Value.ToString())), 2).ToString();
dgvFE.Rows[row.Index - 1].Cells[6].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index - 1].Cells[5].Value.ToString()) / Double.Parse(dgvFE.Rows[row.Index - 1].Cells[2].Value.ToString())), 2).ToString();
}
}
MtrtextBox1.Text = null;
BvtextBox12.Text = null;
MtrtextBox1.BackColor = Color.White;
BvtextBox12.BackColor = Color.White;
}
}
用户可以毫无问题地将第一行数据输入到dgv。 但是如果用户在dgv中输入的日期少于Cell [0]日期,则会显示我的错误消息框。 那也没关系。 然后,用户应输入比dgv中的Cell [0]更高的日期。 但问题出现了。 即使用户选择的日期高于dgv上的Cell [0]日期,它也始终显示消息框。 任何人都可以帮我解决这个问题吗? 我用谷歌搜索,没有找到任何解决方案。 对不起,我的英语不好。
将字符串转换为日期时应注意date format
。
下面的代码可能适合您。 我建议添加断点或警报语句以查看实际的运行时值,有时会给出答案。
private void FEAdd_Click(object sender, EventArgs e)
{
var boxes = new List<TextBox>
{
MtrtextBox1,
PltrtextBox11,
BvtextBox12,
};
if (boxes.Any(tb => string.IsNullOrEmpty(tb.Text)))
{
MessageBox.Show("Fill required fields", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
MtrtextBox1.BackColor = Color.Red;
BvtextBox12.BackColor = Color.Red;
return;
}
else if (dgvFE.Rows.Count > 0)
{
DateTime dt1 = DateTime.ParseExact(dgvFE.Rows[dgvFE.RowCount - 1].Cells[0].Value.ToString(), "dd-MM-yyyy", CultureInfo.InvariantCulture); // careful about date formats.
DateTime dt2 = dateTimePicker1.Value.Date;
if(dt1>dt2)
{
MessageBox.Show("Current bill date cannot be less than the previous bill date.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
}
int n = dgvFE.Rows.Add();
dgvFE.Rows[n].Cells[0].Value = dateTimePicker1.Value.ToString("dd-MM-yyyy");
dgvFE.Rows[n].Cells[1].Value = MtrtextBox1.Text.ToString();
dgvFE.Rows[n].Cells[3].Value = PltrtextBox11.Text.ToString();
dgvFE.Rows[n].Cells[4].Value = BvtextBox12.Text.ToString();
foreach (DataGridViewRow row in dgvFE.Rows)
{
dgvFE.Rows[row.Index].Cells[2].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index].Cells[4].Value.ToString()) / Double.Parse(dgvFE.Rows[row.Index].Cells[3].Value.ToString())), 2).ToString();
if (n >= 1 && row.Index > 0)
{
dgvFE.Rows[row.Index - 1].Cells[5].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index].Cells[1].Value.ToString()) - Double.Parse(dgvFE.Rows[row.Index - 1].Cells[1].Value.ToString())), 2).ToString();
dgvFE.Rows[row.Index - 1].Cells[6].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index - 1].Cells[5].Value.ToString()) / Double.Parse(dgvFE.Rows[row.Index - 1].Cells[2].Value.ToString())), 2).ToString();
}
}
MtrtextBox1.Text = null;
BvtextBox12.Text = null;
MtrtextBox1.BackColor = Color.White;
BvtextBox12.BackColor = Color.White;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.