Обработка заголовка/header в dataGridView

127
12 сентября 2021, 15:50

Такая проблема, получаю значения из 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.");
        }
    }
}
Answer 1

Все решилось изменением значения UseHeaderRow с true на false:

 DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
 {
    ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
 });
READ ALSO
LINQ-запрос на выборку данных

LINQ-запрос на выборку данных

Мне нужно написать event handler, который удалит всех writer, привязанных к bookНе могу написать LINQ-запрос

87
Как создать копию List&lt;T&gt;?

Как создать копию List<T>?

У меня есть List внутри которого LanguageSet

241
Цикл для массива кнопок

Цикл для массива кнопок

Суть в том, что есть 9 кнопокЕсли нажать на одну из этих кнопок на этой кнопке должен появиться текст "Х"

305
При обращение к View каждый раз срабатывает get{} у свойств

При обращение к View каждый раз срабатывает get{} у свойств

Пытаюсь разобраться с анимацией в MVVMУсловно имеется 2 View

105