Вот сценарий:
- < 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);
}
Теперь моя цель — проверить условия в dt1. , а затем заполните строки в таблице dtTemp, которая позже отобразит данные в datagridview.
Код извлекает значение x до последнего оператора if правильно, однако в таблицу данных dtTemp ничего не заполняется, и я не знаю, почему. Вместо этого я получаю следующую ошибку:
[ошибка: «нет строки в позиции 0]
Подробнее здесь: https://stackoverflow.com/questions/500 ... lts-in-err