Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数组值放入DataGridView_C#_Arrays_Datagridview - Fatal编程技术网

C# 将数组值放入DataGridView

C# 将数组值放入DataGridView,c#,arrays,datagridview,C#,Arrays,Datagridview,我一直在想如何将数组值添加到DataGridView中。现在,所有的值都被添加到一个列中,当我真的在寻找以下内容时: Col1 Col2 Name Number Adam 3 Ryan 4 现在他们表现得像 Col1 Col2 Name Number Adam 3 Ryan 4 通过读取excel电子表格的值来填充数组。我已经搜索并尝试了不同的方法,但都没有成功。下面是我目前正在使用的代码 using System; using System.Collections.Generic

我一直在想如何将数组值添加到DataGridView中。现在,所有的值都被添加到一个列中,当我真的在寻找以下内容时:

Col1  Col2
Name  Number
Adam  3
Ryan  4
现在他们表现得像

Col1  Col2
Name
Number
Adam
3
Ryan
4
通过读取excel电子表格的值来填充数组。我已经搜索并尝试了不同的方法,但都没有成功。下面是我目前正在使用的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsFormsApplication12
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Excel.Application xlApp ;
        Excel.Workbook xlWorkBook ;
        Excel.Worksheet xlWorkSheet ;
        Excel.Range range ;

        //string str;
        int rCnt = 0;
        int cCnt = 0;

        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Open("C:\\Text Files\\test1.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        range = xlWorkSheet.UsedRange;

        string[,] excelArray = new string[range.Rows.Count, range.Columns.Count];
        for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
        {
            for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
            {
                excelArray[rCnt - 1, cCnt - 1] = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2.ToString();
                //excelArray[rCnt - 1,cCnt - 1] = str;
                //listBox1.Items.Add("location " + rCnt + "," + cCnt + " value " + excelArray[rCnt - 1, cCnt - 1] + excelArray[rCnt, cCnt - 1]);

                this.dataGridView1.Rows.Add(excelArray[rCnt -1, cCnt - 1]);
                //dataGridView1.DataSource = excelArray[rCnt - 1, cCnt - 1];
            }
        }

        xlWorkBook.Close(true, null, null);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);
    }

    private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            MessageBox.Show("Unable to release the Object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }

}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用Excel=Microsoft.Office.Interop.Excel;
命名空间Windows窗体应用程序12
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
Excel.applicationxlapp;
Excel.工作簿;
Excel工作表;
范围;
//字符串str;
int rCnt=0;
int-cCnt=0;
xlApp=new Excel.ApplicationClass();
xlWorkBook=xlApp.Workbooks.Open(“C:\\Text Files\\test1.xlsx”,0,true,5,”,“”,true,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,“\t”,false,false,0,true,1,0);
xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets.get_项(1);
range=xlWorkSheet.UsedRange;
string[,]excelArray=新字符串[range.Rows.Count,range.Columns.Count];

对于(rCnt=1;rCnt为了避免协调问题(并保持当前循环),我认为最好的解决方案是分离行创建和单元格填充部分。也就是说,首先添加所有行(我知道您已经将所有必需的列添加到
DataGridView1
):


用于(rCnt=1;rCnt如果我理解正确,我将添加的新for循环将与当前循环相同?但不是填充数组,然后将其添加到同一循环中的DGV,而是将其拆分?如果是这样,我不会得到相同的结果吗?@user2405778我已让您的循环与代码中的相同,并调整数据GridView填充到您的需求。用我的两位代码替换两个嵌套循环(第一个创建行的循环+两个填充单元格的嵌套循环)。此代码将在DGV中复制与Excel中相同的结构(每列/每行相同的值),这就是你想要的,不是吗?啊,好吧,我没注意到你在第二个嵌套for循环中更改了代码。这正是我想要的,非常感谢你的帮助!
for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
{
    dataGridView1.Rows.Add();
}
for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
{
    for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
    {
        excelArray[rCnt - 1, cCnt - 1] = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2.ToString();

        this.dataGridView1[cCnt - 1, rCnt - 1].Value = excelArray[rCnt - 1, cCnt - 1]; //Note that column goes first in the DGV
    }
}