Такая проблема, получаю значения из Excel в dataGridView.
Вид Excel файла:
Так его открывает dataGridView:
Как вы видите, первая строка Excel становится header`ом dataGridVView, и значение из нее уже получить не выйдет. Можно ли это как-нибудь обойти? Можно как-то отключить header в dataGridView или вставлять на первое место пустую строку?
Так открываю Excel:
private void btnBrowse_Click(object sender, EventArgs e)
{
//using - аналог try-catch
using (OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = "Excel Workbook|*xlsx|Excel 97-2003 Workbook|-xls" })
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
txtFilname.Text = openFileDialog.FileName.Trim();
using (var stream = File.Open(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
{
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
{
openedFileName = openFileDialog.FileName;
DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
});
tableCollection = result.Tables;
cboSheet.Items.Clear();
foreach (DataTable table in tableCollection)
cboSheet.Items.Add(table.TableName); // Add sheet to combobox
}
}
}
}
}
Обработка dataGridView:
private void createHandover_Click(object sender, EventArgs e)
{
try
{
string[] fromBs = new string[dataGridView1.Rows.Count];
string[] fromFreq = new string[dataGridView1.Rows.Count];
string[] toBs = new string[dataGridView1.Rows.Count];
string[] toFreq = new string[dataGridView1.Rows.Count];
//Убрать путь из имени файла
openedFileName = Path.GetFileNameWithoutExtension(openedFileName);
string fileName = $"handover{openedFileName}.txt";
//Создание файла на рабочем столе
StreamWriter sw = new StreamWriter($"C:\\Users\\{Environment.UserName}\\Desktop\\" + fileName);
//Пустой ли первый ряд, написать проверку
//if(dataGridView1.Rows[0] != null)
//{
// dataGridView1.Rows.Add(' ', ' ', ' ', ' ');
//}
//Поиск нужный значений в dataGridView
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
//dataGridView1.DefaultView.RowFilter = string.Format("[_RowString] LIKE '%{0}%'", textBox1.Text);
if (cell.ColumnIndex == 0) //Set your Column Index
{
//(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Field = '{0}'", "LUG");
fromBs[cell.RowIndex] += cell.Value;
}
if (cell.ColumnIndex == 1) //Set your Column Index
{
fromFreq[cell.RowIndex] += cell.Value;
}
if (cell.ColumnIndex == 2) //Set your Column Index
{
toBs[cell.RowIndex] += cell.Value;
}
if (cell.ColumnIndex == 3) //Set your Column Index
{
toFreq[cell.RowIndex] += cell.Value;
}
}
}
//Удаление пустых значений из массива
fromBs = fromBs.Where(x => !string.IsNullOrEmpty(x)).ToArray();
fromFreq = fromFreq.Where(x => !string.IsNullOrEmpty(x)).ToArray();
toBs = toBs.Where(x => !string.IsNullOrEmpty(x)).ToArray();
toFreq = toFreq.Where(x => !string.IsNullOrEmpty(x)).ToArray();
//Замена перевого столбца
for (int i = 0; i < fromBs.Length; i++)
{
if (fromBs[i].Contains("_1"))
fromBs[i] = fromBs[i].Replace("_1", "A");
if (fromBs[i].Contains("_2"))
fromBs[i] = fromBs[i].Replace("_2", "B");
if (fromBs[i].Contains("_3"))
fromBs[i] = fromBs[i].Replace("_3", "C");
}
//Замена второго столбца
for (int i = 0; i < toBs.Length; i++)
{
if (toBs[i].Contains("_1"))
toBs[i] = toBs[i].Replace("_1", "A");
if (toBs[i].Contains("_2"))
toBs[i] = toBs[i].Replace("_2", "B");
if (toBs[i].Contains("_3"))
toBs[i] = toBs[i].Replace("_3", "C");
}
//Запись в файл
for (int i = 0; i < fromBs.Length; i++)
{
sw.Write("RLNRI:CELL=" + fromBs[i] + ", CELLR=" + toBs[i] + ";" + Environment.NewLine);
if (i + 1 == fromBs.Length)
{
sw.Write(Environment.NewLine);
}
}
for (int i = 0; i < fromBs.Length; i++)
{
//Обрезка строки и сравнение
if (fromBs[i].Trim(new char[] { 'A', 'B', 'C' }) == toBs[i].Trim(new char[] { 'A', 'B', 'C' }))
{
sw.Write("RLNRC:CELL=" + fromBs[i] + ", CELLR=" + toBs[i] + ",CAND=BOTH,CS=YES,KHYST=6,KOFFSETP=0," +
"LHYST=8,LOFFSETP=0,TRHYST=4,TROFFSETP=0,AWOFFSET=10,BQOFFSET=10;" + Environment.NewLine);
}
else
{
sw.Write("RLNRC:CELL=" + fromBs[i] + ", CELLR=" + toBs[i] + ",CAND=BOTH,CS=NO,KHYST=6,KOFFSETP=0," +
"LHYST=8,LOFFSETP=0,TRHYST=4,TROFFSETP=0,AWOFFSET=10,BQOFFSET=10;" + Environment.NewLine);
}
if (i + 1 == fromBs.Length)
{
sw.Write(Environment.NewLine);
}
}
for (int i = 0; i < fromBs.Length; i++)
{
sw.Write("RLMFC:CELL=" + fromBs[i] + ", MBCCHNO=" + toFreq[i] + ",MRNIC;" + Environment.NewLine);
if (i + 1 == fromBs.Length)
{
sw.Write(Environment.NewLine);
}
}
for (int i = 0; i < fromBs.Length; i++)
{
sw.Write("RLMFC:CELL=" + toBs[i] + ", MBCCHNO=" + fromFreq[i] + ",MRNIC;" + Environment.NewLine);
}
//dataGridView1.Rows[rowindex].Cells[columnindex].Value.ToString();
sw.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
finally
{
MessageBox.Show("Created.");
}
}
}
Все решилось изменением значения UseHeaderRow с true на false:
DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Мне нужно написать event handler, который удалит всех writer, привязанных к bookНе могу написать LINQ-запрос
Суть в том, что есть 9 кнопокЕсли нажать на одну из этих кнопок на этой кнопке должен появиться текст "Х"
Пытаюсь разобраться с анимацией в MVVMУсловно имеется 2 View