Как мне заставить мои данные отображаться в правильном столбце DataGridView?

Я пытаюсь заполнить свой DataGridView пользовательскими столбцами, импортированными из Excel. Это должно быть легко, но на всю жизнь я застрял в мозгу. Я должен иметь возможность выбирать определенные столбцы (работает), отправлять заголовки столбцов в мой класс excel для анализа данных из этого столбца (работает), отправлять проанализированные данные в список (работает), а затем импортировать данные в datagridview установив мой DataSource в качестве моего списка (я создаю текст заголовка столбца, но код создает столбец с именем Value и добавляет в него свои данные). Вот мой код, который создает проблему:

private void btnCreateTable_Click(object sender, EventArgs e)
    {
        List<StringValue>[] listArr = new List<StringValue>[columnCount];
        ExcelClass getData = new ExcelClass();
        tabControl1.SelectedTab = tabDataTable;
        dgv.Visible = true;
        
        DataGridViewTextBoxColumn t = new DataGridViewTextBoxColumn();

        //dgvSelectedHeaders.Columns[i].Name = selectedHeaders[i];
        for (int i = 0; i < columnCount; i++)
        {
            //dgv[i].DataSource = getData.GetDataFromExcel(headersArr[i], path);
            listArr[i] = getData.GetDataFromExcel(selectedHeaders[i], path);
            t.Name = selectedHeaders[i];
            t.HeaderText = selectedHeaders[i];
            dgv.Columns.Add(t);
            dgv.DataMember = "String";
            dgv.DataSource = listArr[i];
            for (int j = 0; j < getData.RowCount; j++)
            {
                dgv.Rows.Add();
                for (int k = 0; k < getData.RowCount; k++)
                {
                    dgv[k, j].Value = listArr[j][k].ToString();
                }
            }

        }

Образ проблемы

Если я выбираю более одного столбца, он показывает первый, но я получаю сообщение об ошибке после первого в строке dgv.Columns.Add(t); ... InvalidOperationException, при условии, что столбец уже принадлежит элементу управления DataGridView... Я знаю, что это два вопроса, но я думаю, что они как-то связаны друг с другом.

Заранее спасибо, и если вам нужно больше кода, дайте мне знать.


person Dave_P    schedule 30.08.2011    source источник
comment
Вы уверены, что это getData.RowCount как для k-for-loop, так и для j-for-loops?   -  person Jake    schedule 30.08.2011


Ответы (1)


Я думаю, вам нужно создать новый DataGridViewColoumn для каждого столбца

for (int i = 0; i < columnCount; i++) 
{
    DataGridViewTextBoxColumn t = new DataGridViewTextBoxColumn(); 
    // ...
    dgv.Columns.Add(t);
}

а не использовать его повторно.

person Jake    schedule 30.08.2011
comment
Ну... это частично помогает, спасибо. Теперь я получаю все выбранные столбцы, но у меня все еще есть данные только в одном столбце (значение). Значение - это свойство из моего класса-оболочки, и я не могу установить для него имя столбца. фу... - person Dave_P; 30.08.2011