如何调试datagridview逻辑错误

问题描述 投票:0回答:1

我尝试修复数据网格视图中的逻辑错误。这是我的代码。

while (dr.Read())
            {

                int id = dr.GetInt32(0);
                DateTime startBook = dr.GetDateTime(2);
                DateTime endBook = dr.GetDateTime(3);

                int startBook_C = startBook.Day;
                int endBook_C = endBook.Day;

                int TotalDays = endBook_C - startBook_C;

                //dataGridView1(startBook_C, id - 1).Style.BackColor = Color.Blue;
                dataGridView1.Rows[startBook_C].Cells[endBook_C-1].Style.BackColor = Color.Blue;
                int i;
                for (i = 1; i <= TotalDays; i++)
                {
                    dataGridView1.Rows[startBook_C + i].Cells[endBook_C -1].Style.BackColor = Color.Blue;
                    //dataGridView1.Rows[startBook_C].Cells[carID - 1].Style.BackColor = Color.Blue;
                    // dataGridView1(startBook_C + i, id - 1).Style.BackColor = Color.Red;/* TODO ERROR: Skipped SkippedTokensTrivia */
                    TotalDays -= 1;
                }



            }
            Con.Close();

我的 datagridview 有问题,这是逻辑错误,我不知道我的错误是什么。我有下面的图片:

enter image description here

enter image description here

c# visual-studio
1个回答
1
投票

考虑

startBook.Day= day 1
endBook.Day = day 3
(ID 23的行)。 第一个循环
i =1
;

然后

dataGridView1.Rows[startBook_C + i].Cells[endBook_C -1]
dataGridView1.Rows[**2**].Cells[**2**]
(从 0 开始),因此提供的图像显示 DataGrid 视图表[3][3] 是蓝色。

对于 ID 23,行为 0(第一行)。 cell从4开始(第五个,偏移量为4,//ID+CARID+book StartDay+book EndDay=4。)

总天数 -= 1;循环中不需要。

while (dr.Read())
            {
                int offset = 4;//ID+CARID+book StartDay+book EndDay=4.
                int id = dr.GetInt32(0);
                DateTime startBook = dr.GetDateTime(2);
                DateTime endBook = dr.GetDateTime(3);

                int startBook_C = startBook.Day;//1
                int endBook_C = endBook.Day;//3

                int TotalDays = endBook_C - startBook_C; //2
               
                for (int i = 0; i <= TotalDays; i++)
                {
                   dataGridView1.Rows[0].Cells[offset+startBook_C - 1+i].Style.BackColor = Color.Blue;
                  
                }

            }
            Con.Close();

更新:由于示例中的许多方法没有提供明确的定义,我提供了自己的方式

   int offset = 4;
   foreach (DataGridViewRow row in dataGridView1.Rows)
   {

       if (!row.IsNewRow)
       {

           if (row.Cells.Count >= 4)
           {

               DateTime startBook;
               DateTime endBook;
               if (DateTime.TryParse(row.Cells[2].Value?.ToString(), out startBook) &&
                   DateTime.TryParse(row.Cells[3].Value?.ToString(), out endBook))
               {

                   int startBook_C = startBook.Day;
                   int endBook_C = endBook.Day;
                   int TotalDays = endBook_C - startBook_C;
                   for (int i = 0; i <= TotalDays; i++)
                   {
                       dataGridView1.Rows[row.Index].Cells[offset + startBook_C - 1 + i].Style.BackColor = Color.Blue;

                   }
               }
           }
       }
   }

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.