2

我正在用C#开发一个Windows 窗体应用程序。我的程序将从 excel 单元格中读取值并将数据插入 DataGridView 以显示用户。

在我阅读了 excel 文件后,我得到了字符串数组中的结果。如何插入 DataGridView?

private void btnImport_Click(object sender, EventArgs e)
    {
        Microsoft.Office.Interop.Excel.Application ExcelObj = null;
        ExcelObj = new Microsoft.Office.Interop.Excel.Application();

        if (ExcelObj != null)
        {
            if (tbxFileDirectory.Text != "")
            {
                Workbook workbook = ExcelObj.Workbooks.Open(
                openFD.FileName, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true);

                Sheets sheets = workbook.Worksheets;

                //Get excel sheet number
                Worksheet worksheet = (Worksheet)sheets.get_Item(1);

                for (int i = 6; i <= worksheet.UsedRange.Rows.Count; i++)
                {
                    Range range = worksheet.get_Range("A" + i.ToString(), "K" + i.ToString());

                    Array myvalues = (Array)range.Cells.Value;

                    string[] strArray = ConvertToStringArray(myvalues);

                    //INSERT INTO DATAGRIDVIEW
                }
                MessageBox.Show("File was imported successfully");
            }
            else
            {
                MessageBox.Show("Please select the file to import.");
            }
        }
        else 
        {
            MessageBox.Show("ERROR: EXCEL couldn't be started!");
        }
    }

我的 DataGrid 有 4 列,ProductID、ProductName、Price 和 Qty。我想在每一列中插入这些值 strArray[0]、strArray[1]、strArray[9] 和 strArray[10]。我怎样才能做到这一点?任何帮助都感激不尽!

4

2 回答 2

2

你可以这样做

dataGridView1.Rows.Add(strArray[0],strArray[1]......);
于 2013-08-22T08:37:51.443 回答
2

DataGridView 在直接插入字符串时会出现性能问题,如果您拥有的只是网格本身中的数据(尽管显然您必须使用从 excel 解析的数据),那么操作数据会很尴尬。您通常最好将数据放入 DataTable,然后将其绑定到网格。

如果您需要通过代码将数据填充到 DataTable 中的示例,请参阅将新列和数据添加到已包含数据的数据表中 - c# 。

绑定很简单,将 DataTable 分配给网格的 DataSource 属性。

如果您获得超过几百行,您可能仍然会看到性能问题 - 但是,通过将逻辑更改为虚拟化数据,请参阅DataGridView live display of datatable using virtual mode一个简单的示例。

于 2013-08-22T13:36:36.200 回答