Добавление условных данных из таблицы данных в другую таблицу данных приводит к «[ошибке: «нет строки в позиции 0]»C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Добавление условных данных из таблицы данных в другую таблицу данных приводит к «[ошибке: «нет строки в позиции 0]»

Сообщение Anonymous »

Я создаю инструмент для преобразования таблиц .DBF в файлы .csv.
Вот сценарий:
  • < li>Таблица dbf «Поляки» содержит четыре поля «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.
Например, в таблице поляков будут такие данные:
Изображение
И выходной файл CSV должен отображать данные следующим образом:
Изображение

Поле_id является основным полем, и на его основе будут выбираться значения других полей.
На данный момент мне удалось написать следующий код:

Код: Выделить всё

try {

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("pole_id")!= null)
.Where(r=> r.Field("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);
}
Итак, с помощью приведенного выше кода я подключаюсь к таблице dbf и собираю необходимые данные в таблицу dt. Затем я фильтрую данные, удаляя строки, где полюс_id имеет пустое/нулевое значение, и помещаю их в другую таблицу dt1.
Теперь моя цель — проверить условия в dt1. , а затем заполните строки в таблице dtTemp, которая позже отобразит данные в datagridview.
Код извлекает значение x до последнего оператора if правильно, однако в таблицу данных dtTemp ничего не заполняется, и я не знаю, почему. Вместо этого я получаю следующую ошибку:

[ошибка: «нет строки в позиции 0]


Подробнее здесь: https://stackoverflow.com/questions/500 ... lts-in-err
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»