Как добавить условные данные из таблицы данных в другую. [ошибка: "нет строки в позиции 0]. C # - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в программировании и получил эту работу, чтобы создать инструмент для преобразования таблицы .DBF в файл .csv.

так вот сценарий; Таблица dbf 'Poles' содержит четыре поля: 'pole_id', 'guy_hoa_1', 'guy_hoa_2', 'guy_hoa_3' и 'guy_hoa_4'. И окончательный CSV-файл должен показывать значение только в двух столбцах: 'PoleId' и 'HOA' соответственно, где PoleID будет == pole_id и HOA = guy_hoa_1 + '|' + Guy_hoa_2 + '|' + guy_hoa_3 + '|' + guy_hoa_4.

например, таблица Poles будет иметь такие данные, как; Пример данных таблицы поляков

И CSV-файл ouput должен показывать данные следующим образом:

Пример выходного файла CSV

* Pole_id является основным полем, и на его основе будут выбраны значения других полей.

Пока мне удалось написать следующий код:

введите код здесь

enter code here
            string str = textBox1.Text;
            string path = str.Substring(0, str.LastIndexOf("\\") + 1);

            string conn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = '" + path + "';Extended Properties=dBase IV;User ID=Admin;Password=;";
            OleDbConnection connection = new OleDbConnection();
            connection.ConnectionString = conn;
            connection.Open();
            CheckConnectionLabel.Text = "Connected Successfully";



            OleDbDataAdapter adapter = new OleDbDataAdapter(@"SELECT pole_id, guy_hoa_1, guy_hoa_2,guy_hoa_3,guy_hoa_4 FROM poles" + ".dbf", connection);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            adapter.Fill(dt);


         DataTable dt1 = dt.AsEnumerable()
                        .Where(r=> r.Field<string>("pole_id")!= null)
                        .Where(r=> r.Field<string>("pole_id")!=" ")
                        .CopyToDataTable();




         DataTable dtTemp = new DataTable();
         dtTemp.Columns.Add("PoleId", typeof(String)); 
         dtTemp.Columns.Add("HOA", typeof(string));
         string x = string.Empty;



        for (int i=0;i< dt1.Rows.Count;i++)
        {

            if(dt1.Rows[i]["pole_id"]!= null || dt1.Rows[i]["pole_id"].ToString()!= "")

          {

              if(dt1.Rows[i]["guy_hoa_1"]!=null && dt1.Rows[i]["guy_hoa_1"].ToString()!="")

                { 

                     x =dt1.Rows[i]["guy_hoa_1"].ToString();
                }

             if(dt1.Rows[i]["guy_hoa_2"]!= null && dt1.Rows[i]["guy_hoa_2"].ToString()!="")

               {
                      x = x + "|" + dt1.Rows[i]["guy_hoa_2"].ToString();
               }


            if(dt1.Rows[i]["guy_hoa_3"]!=null && dt1.Rows[i]["guy_hoa_3"].ToString()!= "")
              {
                       x = x + "|" + dt1.Rows[i]["guy_hoa_3"].ToString();
              }

             if(dt1.Rows[i]["guy_hoa_4"]!=null && dt1.Rows[i]["guy_hoa_4"].ToString()!= "")
             {
                       x = x + "|" + dt1.Rows[i]["guy_hoa_4"].ToString();
             }


           dtTemp.Rows[i]["PoleId"] = dt1.Rows[i]["poles_id"].ToString();
           dtTemp.Rows[i]["HOA"] = x ;

          }

          }

       connection.Close();


       dataGridView1.DataSource = dtTemp;



       }
        catch (Exception ex)
              {
                    MessageBox.Show("Error " + ex.Message);
               }
 }


enter code here

Итак, с помощью приведенного выше кода я подключился к таблице dbf и собрал необходимые данные в таблице 'dt'. Затем я отфильтровал данные, удалив строки, где pole_id был пустым / пустым, и поместил их в другую таблицу 'dt1'. Теперь моя цель состояла в том, чтобы проверить условия в таблице dt1, а затем заполнить строки в таблице dtTemp, которые позже отобразили бы данные в datagridview.

Код правильно выбирает значение x до последнего оператора IF, однако ничего не заполняется в dtTemp datatable, а затем показывает эту ошибку.

Пожалуйста, помогите мне и дайте мне знать, где я неправ ... большое спасибо заранее !!

1 Ответ

0 голосов
/ 26 апреля 2018

Я получил решение следующим образом;

enter code here
                    object y = dt1.Rows[i]["pole_id"].ToString();
                    dtTemp.NewRow();
                    dtTemp.Rows.Add(y ,x);
...