c# - table of integer - datagridview

c# - table of integer - datagridview

我正在尝试在 Windomws 窗体上显示数据网格视图。 (对于数独) 我的来源是一个 table 整数。

我正在使用数据源,但当我 运行 时没有任何显示。

public Form1()
        {
            InitializeComponent();

            int[,] my_table = new int[9, 9] {
                    { 2,1,8,3,5,7,6,4,9},
                    { 5,7,3,4,9,6,8,2,1},
                    { 6,9,4,1,8,2,3,5,7},
                    { 1,6,9,5,2,8,4,7,3},
                    { 3,5,2,9,7,4,1,8,6},
                    { 4,8,7,6,1,3,2,9,5},
                    { 7,3,5,2,4,1,9,6,8},
                    { 8,2,1,7,6,9,5,3,4},
                    { 9,4,6,8,3,5,7,1,2}
                };


            dataGridView1.DataSource = my_table.ToString();

            dataGridView1.Refresh();

            dataGridView1.Invalidate();
        }

我的结果是一个灰色方块。

你能帮帮我吗?

PS : 对不起我的英语,我是法国人

试试这个:

GetRow 方法取自:

private DataTable GetDTB(int count)
            {
                DataTable tb = new DataTable();
                for (int i = 1; i < count + 1; i++)
                {
                    tb.Columns.Add("C" + i);
                }
                return tb;
            }

            private DataTable FillDTB(int count = 9)
            {
                int[,] my_table = new int[9, 9] {
                        { 2,1,8,3,5,7,6,4,9},
                        { 5,7,3,4,9,6,8,2,1},
                        { 6,9,4,1,8,2,3,5,7},
                        { 1,6,9,5,2,8,4,7,3},
                        { 3,5,2,9,7,4,1,8,6},
                        { 4,8,7,6,1,3,2,9,5},
                        { 7,3,5,2,4,1,9,6,8},
                        { 8,2,1,7,6,9,5,3,4},
                        { 9,4,6,8,3,5,7,1,2}
                    };

                DataTable dtb = GetDTB(count);
                for (int i = 0; i < 9; i++)
                {
                    dtb.Rows.Add(GetRow(my_table, i));
                }

                return dtb;
            }


            public int[] GetRow(int[,] matrix, int rowNumber)
            {
                return Enumerable.Range(0, matrix.GetLength(1))
                        .Select(x => matrix[rowNumber, x])
                        .ToArray();
            }

您好,感谢您的回复 但我不明白,

为什么要使用数据表?不能直接为我的 int[] 提供数据源吗?

我正在尝试:

public Form1()
{
    InitializeComponent();

    int[,] my_table = new int[9, 9] {
                { 2,1,8,3,5,7,6,4,9},
                { 5,7,3,4,9,6,8,2,1},
                { 6,9,4,1,8,2,3,5,7},
                { 1,6,9,5,2,8,4,7,3},
                { 3,5,2,9,7,4,1,8,6},
                { 4,8,7,6,1,3,2,9,5},
                { 7,3,5,2,4,1,9,6,8},
                { 8,2,1,7,6,9,5,3,4},
                { 9,4,6,8,3,5,7,1,2}
            };


    dataGridView1.DataSource = FillDTB(my_table) ;

    dataGridView1.Refresh();


    for(int ii=0; ii<9; ii++)
    {
        for (int jj = 0; jj < 9; jj++)
        {
            richTextBox1.Text += my_table[ii, jj];
            if (jj != 8)
            {
                richTextBox1.Text += ".";
            }
        }
        richTextBox1.Text += Environment.NewLine;


    }


    // dataGridView1.Invalidate();

}



private DataTable GetDTB(int count)
{
    DataTable tb = new DataTable();
    for (int i = 1; i < count + 1; i++)
    {
        tb.Columns.Add("C" + i);
    }
    return tb;
}

private DataTable FillDTB(int[,] matrix, int count = 9)
 {


     DataTable dtb = GetDTB(count);
     for (int i = 0; i < 9; i++)
     {
         dtb.Rows.Add(GetRow(matrix, i));
     }

     return dtb;
 }//*/


public int[] GetRow(int[,] matrix, int rowNumber)
{
    return Enumerable.Range(0, matrix.GetLength(1))
            .Select(x => matrix[rowNumber, x])
            .ToArray();
}

在我的富文本框中,没关系,我有我的价值观。 但在 datagridview 中,我在第一列中只有 "System.Int32[]" 而在其他列中没有任何内容。

我想念什么?

好的,找到了

public Form1()
{
    InitializeComponent();

    int[,] my_table = new int[9, 9] {

                { 8,2,3,4,5,9,1,6,7},
                { 6,9,7,8,1,2,5,6,4},
                { 5,1,4,6,7,3,2,9,8},
                { 7,4,1,3,9,6,8,2,5},
                { 3,6,5,1,2,8,7,4,9},
                { 2,8,9,5,4,7,6,1,3},
                { 1,5,2,7,3,4,9,8,6},
                { 9,3,8,2,6,5,4,7,1},
                { 4,7,6,9,8,1,3,5,2},

            };


    dataGridView1.DataSource = FillDTB(my_table) ;

    dataGridView1.Refresh();


    for(int ii=0; ii<9; ii++)
    {
        for (int jj = 0; jj < 9; jj++)
        {
            richTextBox1.Text += my_table[ii, jj];
            if (jj != 8)
            {
                richTextBox1.Text += ".";
            }
        }
        richTextBox1.Text += Environment.NewLine;


    }


     dataGridView1.Invalidate();

}

private DataTable GetDTB(int count)
{
    DataTable tb = new DataTable();
    for (int i = 1; i < count + 1; i++)
    {
        tb.Columns.Add();
    }
    return tb;
}

private DataTable FillDTB(int[,] matrix, int count = 9)
{


    DataTable dtb = GetDTB(count);

    for (int ii = 0; ii < count; ii++)
    {

        DataRow my_line;
        my_line = dtb.NewRow();

        for (int jj = 0; jj < count; jj++)
        {
            my_line[jj] = matrix[ii, jj];
        }

        dtb.Rows.Add(my_line);

    }

    return dtb;
 }//*/

这是可行的,但没有回应为什么我不能直接在 datagridview 中使用我的 2 维。

谢谢