Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有日期时间选择器的If条件&;datagridview单元格日期_C#_If Statement_Datagridview_Datetimepicker - Fatal编程技术网

C# 带有日期时间选择器的If条件&;datagridview单元格日期

C# 带有日期时间选择器的If条件&;datagridview单元格日期,c#,if-statement,datagridview,datetimepicker,C#,If Statement,Datagridview,Datetimepicker,我是C语言编程新手&我缺乏编码方面的知识。所以请帮帮我 我有datagridview(以下简称dgv),没有绑定到任何数据源。dgv从表单上的一些文本框和datetimepicker(以下简称dtp)中输入数据。我想在用户向dgv输入数据之前检查if条件。请看下面的代码 private void FEAdd_Click(object sender, EventArgs e) { var boxes = new List<TextBox> {

我是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;
       }

   }
private void FEAdd_单击(对象发送方,事件参数e)
{
变量框=新列表
{
MtrtextBox1,
PltrtextBox11,
BvtextBox12,
};
if(box.Any(tb=>string.IsNullOrEmpty(tb.Text)))
{
显示(“填写必填字段”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
MtrtextBox1.BackColor=Color.Red;
BvtextBox12.BackColor=颜色.红色;
}
如果(dgvFE.RowCount>=1&(Convert.ToDateTime(dgvFE.RowCount-1).Cells[0].Value.ToString())>dateTimePicker1.Value.Date))
{
MessageBox.Show(“当前票据日期不能小于前一票据日期。”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
}
其他的
{
int n=dgvFE.Rows.Add();
dgvFE.Rows[n]。单元格[0]。Value=dateTimePicker1.Value.ToString(“dd-MM-yyyy”);
dgvFE.Rows[n].单元格[1].值=MtrtextBox1.Text.ToString();
dgvFE.Rows[n].单元格[3].值=PltrtextBox11.Text.ToString();
dgvFE.Rows[n]。单元格[4]。值=BvtextBox12.Text.ToString();
foreach(dgvFE.Rows中的DataGridViewRow行)
{
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();
如果(n>=1&&row.Index>0)
{
dgvFE.Rows[row.Index-1]。单元格[5]。Value=Math.Round((Double.Parse(dgvFE.Rows[row.Index]。单元格[1]。Value.ToString())-Double.Parse(dgvFE.Rows[row.Index-1]。单元格[1]。Value.ToString()),2)。ToString();
dgvFE.Rows[row.Index-1]。单元格[6]。Value=Math.Round((Double.Parse(dgvFE.Rows[row.Index-1]。单元格[5]。Value.ToString())/Double.Parse(dgvFE.Rows[row.Index-1]。单元格[2]。Value.ToString()),2)。ToString();
}
}
MtrtextBox1.Text=null;
BvtextBox12.Text=null;
MtrtextBox1.BackColor=Color.White;
BvtextBox12.BackColor=颜色.白色;
}
}

用户可以毫无问题地向dgv输入第一行数据。但如果用户输入的日期小于dgv中的单元格[0]日期,则会显示我的错误消息框。那也可以。然后,用户应输入高于dgv中单元格[0]的日期。但问题出在这里。即使用户选择的日期高于dgv上的单元格[0]日期,它也始终显示messagebox。有人能帮我解决这个问题吗?我在谷歌上搜索,没有找到任何解决方案。对不起,我的英语不好。

在将字符串转换为日期时,我们应该注意日期格式

下面的代码可能适合您。我建议添加断点或警报语句以查看实际的运行时值,有时这会给您一个答案

   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;      

   }
private void FEAdd_单击(对象发送方,事件参数e)
{
变量框=新列表
{
MtrtextBox1,
PltrtextBox11,
BvtextBox12,
};
if(box.Any(tb=>string.IsNullOrEmpty(tb.Text)))
{
显示(“填写必填字段”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
MtrtextBox1.BackColor=Color.Red;
BvtextBox12.BackColor=颜色.红色;
返回;
}
否则如果(dgvFE.Rows.Count>0)
{
DateTime dt1=DateTime.ParseExact(dgvFE.Rows[dgvFE.RowCount-1]。单元格[0]。Value.ToString(),“dd MM yyyy”,CultureInfo.InvariantCulture);//注意日期格式。
DateTime dt2=dateTimePicker1.Value.Date;
如果(dt1>dt2)
{ 
MessageBox.Show(“当前票据日期不能小于前一票据日期。”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
返回;
}      
}
int n=dgvFE.Rows.Add();
dgvFE.Rows[n]。单元格[0]。Value=dateTimePicker1.Value.ToString(“dd-MM-yyyy”);
dgvFE.Rows[n].单元格[1].值=MtrtextBox1.Text.ToString();
dgvFE.Rows[n].单元格[3].值=PltrtextBox11.Text.ToString();
dgvFE.Rows[n]。单元格[4]。值=BvtextBox12.Text.ToString();
foreach(dgvFE.Rows中的DataGridViewRow行)
{
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();
如果(n>=1&&row.Index>0)
{
dgvFE.Rows[row.Index-1]。单元格[5]。Value=Math.Round((Double.Parse(dgvFE.Rows[row.Index]。单元格[1]。Value.ToString())-Double.Parse(dgvFE.Rows[row.Index-1]。单元格[1]。Value.ToString()),2)。ToString();
dgvFE.Rows[row.Index-1]。单元格[6]。Value=Math.Round((Double.Parse(dgvFE.Rows[row.Index-1]。单元格[5]。Value.ToString())/Double.Parse(dgvFE.Rows[row.Index-1]。单元格[2]。Value.ToString()),2)。ToString();
}
}
MtrtextBox1.Text=null;
BvtextBox12.Text=null;
MtrtextBox1.BackColor=Color.White;
BvtextBox12.BackColor=颜色.白色;
}

我已根据您给定的解决方案更改了代码。但是当我点击add按钮时,它什么也不做。没有任何行添加到dgv,即使日期高于单元格[0]date@IshanSasanka您可能需要稍微修改一下代码。谢谢@Hari Prasad。你的代码可以工作。我已经在else if条件下添加了else函数,否则将在