如何使DataGridView.Rows.DividerHeight工作?

Sno*_*ofe 3 .net c# datagridview winforms

我试图使用dataGridView创建一个简单的数独界面。问题是我无法DividerHeight上班。下面的代码能够更改垂直分隔线的宽度,但不能更改水平分隔线的宽度:

   public partial class Form1 : Form
{
    private DataTable sudokuTable; 

    public Form1()
    {
        InitializeComponent();
        sudokuTable = getTable();
        dataGridView1.DataSource = sudokuTable;

        for (int i = 0; i < 9; i++){                        
            dataGridView1.Columns[i].Width = 25;
        }

        dataGridView1.Columns[2].DividerWidth = 5; //Working
        dataGridView1.Columns[5].DividerWidth = 5; //Working
        dataGridView1.Rows[2].DividerHeight = 5; //Not working
        dataGridView1.Rows[5].DividerHeight = 5; //Not working

    }


    private static DataTable getTable()
    {
        DataTable newDataTable = new DataTable();


        for (int i = 0; i < 9; i++)
        {
            newDataTable.Columns.Add("c" + i+1, typeof(int));                       
        }

        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);
        newDataTable.Rows.Add(1, 2, 3, 4, 5, 6, 7, 8, 9);

        return newDataTable;
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    } 
}
Run Code Online (Sandbox Code Playgroud)

是否需要更改某些属性才能使其正常工作?

我发现了一个链接,提示未实现dividerHeight:

http://www.visualwebgui.com/Developers/Forums/tabid/364/forumid/68/threadid/68506/scope/posts/Default.aspx

真的吗?

(我正在使用Visual Studio Community 2013和Net Framework 4.5)

TaW*_*TaW 5

您的代码工作正常。经过一些额外的修饰,看起来像这样:

在此处输入图片说明

这基本上是您的代码,应用于刚刚放入表单的普通DataGridView。

private void button1_Click_1(object sender, EventArgs e)
{
    dataGridView1.DataSource = null;
    dataGridView1.Rows.Clear();
    dataGridView1.Columns.Clear();

    sudokuTable = getTable();
    dataGridView1.DataSource = sudokuTable;

    for (int i = 0; i < 9; i++)
    {
        dataGridView1.Columns[i].Width = 25 + ((i+1)%3 == 0 ? 5:0);
    }

    dataGridView1.Columns[2].DividerWidth = 5;
    dataGridView1.Columns[5].DividerWidth = 5; 
    dataGridView1.Rows[2].DividerHeight = 5; 
    dataGridView1.Rows[5].DividerHeight = 5; 

    dataGridView1.Rows[2].Height += 5;
    dataGridView1.Rows[5].Height += 5; 

    dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

    dataGridView1.RowHeadersVisible = false;
    dataGridView1.ColumnHeadersVisible = false;
    dataGridView1.AllowUserToAddRows = false;
    dataGridView1[0, 0].Selected = false;
}
Run Code Online (Sandbox Code Playgroud)

功能完全没有变化getTable

更新:我能够重现您的问题。我DataGridView正在TabPage启动时未选择的。通过选择选项卡之前调用按钮单击代码我看到了您的错误;当我把在一行中选择该选项卡第一一切又恢复了..看起来像一个问题/ 错误的DGV有它的布局时,它是不可见的 ..

注意:在构造函数中调用它永远不会起作用!那还为时过早。很好,但是..Form_Load

作为临时的解决方法,您可以将代码移至“开始”位置Button。(无论如何,对于下一轮来说,具有“开始”按钮可能是一个好主意。)