Member 12076824 Ответов: 1

Оконные формы C# заполняют datagrid пустыми столбцами, если в поле отсутствует порядковый номер


Я пытаюсь заполнить данные из базы данных в gridview. Он прекрасно работает, данные заполняются, но мне нужно добавить пустую строку, если запись отсутствует. У меня есть combobox с именами изображений, перечисленными в нем, и мне нужно использовать его для сравнения, если конкретное изображение отсутствует, мне нужно добавить пустую запись на его место между предыдущей добавленной записью и следующей записью из базы данных.

Например. У меня есть 10 изображений в combobox. Я сохранил данные из 6 изображений, а затем из последних 2 изображений, но пропустил два изображения(7,8). Поэтому, когда я нажимаю кнопку, она открывает другое окно с gridview, чтобы показать введенные данные и пустые строки между записями, извлеченными из базы данных.

Я пытаюсь получить какую-то идею, чтобы реализовать это. Любая помощь или предложения приветствуются.

SetValue = Marriage.SetValue;
          cmbcount = Marriage.cmbcount;
          DataRow dr;
          string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString;
          using (SqlConnection con =  new SqlConnection(ConnectionString))
          {
              using (SqlCommand cmd = new SqlCommand())
              {
                  cmd.CommandType = CommandType.StoredProcedure;
                  cmd.CommandText = "usp_CAMR_BatchVerify";
                  con.Open();
                  cmd.Connection = con;
                  cmd.Parameters.AddWithValue("@BATCH_NAME", SetValue);
                  cmd.Parameters.AddWithValue("@ERR_CODE", "");
                  cmd.Parameters.AddWithValue("@ERR_MSG", "");
                  cmd.Parameters.AddWithValue("@TABLE_NAME", "");
                  using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                  {
                      using (DataTable dt = new DataTable())
                      {
                          sda.Fill(dt);
                          dataGridView1.DataSource = dt;

                          for (int i = dt.Rows.Count; i < cmbcount; i++)
                          {
                              dr = dt.NewRow();
                              dt.Rows.Add(dr);
                          }
                          dt.AcceptChanges();
                          dataGridView1.DataSource = dt;
                          //dataGridView1.DataBind();
                      }
                  }
              }
          }


Что я уже пробовал:

Я поспешил заполнить пустые записи для остальных еще не сохраненных изображений.

j snooze

Если я правильно понял ваш вопрос не могли бы вы использовать
ДТ.Строк.Insert (int, int) первая-это позиция для добавления строки, вторая-количество строк, которые вы хотите вставить.

Member 12076824

Спасибо за ответ и извините за путаницу. Я пытался вставить строку только в том случае, если она еще не сохранена. Он может быть в конце или где-то посередине некоторых рядов

Karthik_Mahalingam

для (тип int я = ДТ.Строк.Count; i < cmbcount; i++)
это добавит строки только в конце, а не в середине(недостающая часть)
опубликуйте скриншот, если это возможно.

Member 12076824

Спасибо за ответ, я работал над той частью, которая прекрасно работала, как вы указали в конце. Я как пытался получить помощь с вставкой пустых строк посередине, так ее там и не было

Karthik_Mahalingam

ладно

1 Ответов

Рейтинг:
4

Member 12076824

Один из способов, которым я пытался это сделать и прекрасно работает, возможно, потребуется внести некоторые изменения

SetValue = Marriage.SetValue;
            cmbcount = Marriage.cmbcount;
            DataRow dr;
            string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings[dbConnection"].ConnectionString;
            using (SqlConnection con =  new SqlConnection(ConnectionString))
            {
                SqlCommand comd = new SqlCommand();
                comd.CommandType = CommandType.StoredProcedure;
                comd.CommandText = "usp_CAMR_BatchVerify";
                con.Open();
                comd.Connection = con;
                comd.Parameters.AddWithValue("@BATCH_NAME", SetValue);
                comd.Parameters.AddWithValue("@ERR_CODE","");
                comd.Parameters.AddWithValue("@ERR_MSG", "");
                comd.Parameters.AddWithValue("@TABLE_NAME", "");
                SqlDataAdapter sda1 = new SqlDataAdapter(comd);
                DataTable dt1 = new DataTable();
                dt1.Columns.Add("A");
                dt1.Columns.Add("B");
                dt1.Columns.Add("C");
                dt1.Columns.Add("D");
                dt1.Columns.Add("E");
                dt1.Columns.Add("F");
                dt1.Columns.Add("G");
                dt1.Columns.Add("H");
                dt1.Columns.Add("I");
                dt1.Columns.Add("J");
                dt1.Columns.Add("K");
                SqlDataReader dr1 = comd.ExecuteReader();
                int i1 = 1;
                while (dr1.Read())
                {
                    for (int i3 = i1; i3 <= cmbcount; i3++)
                    {
                    DataRow dr01 = dt1.NewRow();
                    setimg = dr1["field1"].ToString();
                    string tempimg = setimg.Substring(3, 4);
                    tmpimg = Convert.ToInt32(tempimg);

                    /* fields to be entered into dt1 
                      as dr01["A"] = dr1["A"]*/

                        if (i1 == tmpimg)
                        {
//to add rows from database
                            dt1.Rows.Add(dr01);
                            i1++;
                        }
                        else
                        {
// to add missing rows between the rows from the database
                            for (int i = i1; i < tmpimg; i++)
                            {
                                dr01 = dt1.NewRow();
                                dt1.Rows.Add(dr01);
                                dt1.AcceptChanges();
                                dataGridView1.DataSource = dt1;
                                i1++;
                            }

                        }
                    }
                    dataGridView1.DataSource = dt1;
                }
// to add rows at the end
                for (int i = dt1.Rows.Count; i < cmbcount; i++)
                {
                    dr = dt1.NewRow();
                    dt1.Rows.Add(dr);
                }
                dt1.AcceptChanges();
                dataGridView1.DataSource = dt1;
            }