Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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.Rows.DividerHeight工作?_C#_.net_Winforms_Datagridview - Fatal编程技术网

C# 如何使DataGridView.Rows.DividerHeight工作?

C# 如何使DataGridView.Rows.DividerHeight工作?,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我尝试使用dataGridView制作一个简单的数独界面。问题是我不能让切分灯工作。下面的代码可以更改垂直分隔符的宽度,但不能更改水平分隔符的宽度: public partial class Form1 : Form { private DataTable sudokuTable; public Form1() { InitializeComponent(); sudokuTable = getTable(); d

我尝试使用dataGridView制作一个简单的数独界面。问题是我不能让切分灯工作。下面的代码可以更改垂直分隔符的宽度,但不能更改水平分隔符的宽度:

   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)
    {

    } 
}
公共部分类表单1:表单
{
私有数据表sudokuTable;
公共表格1()
{
初始化组件();
sudokuTable=getTable();
dataGridView1.DataSource=sudokuTable;
对于(int i=0;i<9;i++){
dataGridView1.Columns[i].Width=25;
}
dataGridView1.Columns[2]。DividerWidth=5;//正在工作
dataGridView1.Columns[5]。DividerWidth=5;//正在工作
dataGridView1.Rows[2]。DividerHeight=5;//不工作
dataGridView1.Rows[5]。DividerHeight=5;//不工作
}
私有静态数据表getTable()
{
DataTable newDataTable=新DataTable();
对于(int i=0;i<9;i++)
{
添加(“c”+i+1,typeof(int));
}
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
添加(1,2,3,4,5,6,7,8,9);
返回newDataTable;
}
私有void Form1\u加载(对象发送方、事件参数e)
{
} 
}
是否有一些属性需要更改才能正常工作

我发现一个链接表明未实现dividerHeight:

dataGridView1.Columns[2].DefaultCellStyle.BackColor = Color.Red;
dataGridView1.Rows[2].DefaultCellStyle.BackColor = Color.Red;

这是真的吗


(我使用的是Visual Studio Community 2013和Net Framework 4.5)

免责声明:正如TaW所发现的,当从表单构造函数移动到
表单加载时,OP代码工作正常。有关详细信息,请参阅。我留下这个答案纯粹是为了将来参考和作为第二选择


我相信这与
数据源
绑定有关。强调一下:我接受了您的代码(对我来说,它在行分隔符上也不起作用),并决定测试其他东西-由于您的评论:

建议dividerHeight未实现

我对以下各项进行了测试,并确信其已实施:

dataGridView1.Columns[2].DefaultCellStyle.BackColor = Color.Red;
dataGridView1.Rows[2].DefaultCellStyle.BackColor = Color.Red;
列已成功着色,但行保持不变。这让我怀疑这是否是绑定,因为我以前见过绑定在样式、可访问性等方面导致了一些奇怪的问题。实际上,将
数据源
绑定到其他东西(例如自定义行对象的
列表
)也失败了

由于
表单
,以及随后的
DataGridView
,尚不可见,因此上述样式更改为行以及绑定“失败”。默认情况下,可见性和绑定不会在幕后更改/处理,直到构造函数运行它的过程


因此,我采纳了您的一般想法,即TaW关于纠正宽度[和高度]的想法,并删除了
数据源
——将其替换为手动填充
DataGridView
。以下结果用于完成所述的预期输出:

private List<int> dividers = new List<int>() { 2, 5 };
private int pad = 5;

public Form1()
{
    InitializeComponent();
    InitializeDataGridView();
}

private void InitializeDataGridView()
{
    dataGridView1.AllowUserToAddRows = false;

    for (int i = 0; i < 9; i++)
    {
        DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
        column.HeaderText = "c" + (i + 1);
        column.Width = 25 + (dividers.Contains(i) ? pad : 0);
        dataGridView1.Columns.Add(column);
    }

    for (int i = 0; i < 9; i++)
    {
        DataGridViewRow row = new DataGridViewRow();
        row.CreateCells(dataGridView1);
        row.Height = row.Height + (dividers.Contains(i) ? pad : 0);
        dataGridView1.Rows.Add(row);

        foreach (DataGridViewCell cell in dataGridView1.Rows[i].Cells)
        {
            cell.Value = cell.ColumnIndex;
        }
    }

    foreach (int div in dividers)
    {
        dataGridView1.Columns[div].DividerWidth = pad;
        dataGridView1.Rows[div].DividerHeight = pad;
    }
}
private List dividers=new List(){2,5};
专用int pad=5;
公共表格1()
{
初始化组件();
初始化为TagRidView();
}
private void initializedTagRidView()
{
dataGridView1.AllowUserToAddress=false;
对于(int i=0;i<9;i++)
{
DataGridViewTextBoxColumn=新DataGridViewTextBoxColumn();
column.HeaderText=“c”+(i+1);
列宽=25+(分隔符包含(i)?填充:0);
dataGridView1.Columns.Add(column);
}
对于(int i=0;i<9;i++)
{
DataGridViewRow行=新建DataGridViewRow();
CreateCells(dataGridView1);
行高=行高+(分隔符包含(i)?填充:0);
dataGridView1.Rows.Add(row);
foreach(dataGridView1.Rows[i].Cells中的DataGridViewCell单元格)
{
cell.Value=cell.ColumnIndex;
}
}
foreach(整数除法器中的除法器)
{
dataGridView1.Columns[div].DividerWidth=pad;
dataGridView1.Rows[div].DividerHeight=pad;
}
}

您的代码工作正常。通过一些额外的接触,它看起来像这样:

这基本上是您的代码,应用于刚刚拖放到表单中的普通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;
}
private void按钮1\u单击1(对象发送者,事件参数e)
{
dataGridView1.DataSource=null;
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
sudokuTable=getTable();
dataGridView1.DataSource=sudokuTable;
对于(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.行[2].高度+=5;
dataGridView1.行[5]。高度+=5;
dataGridView1.DefaultCellStyle.Alignment=DataGridViewContentAlignment.MiddleCenter;
dataGridView1.RowHeadersVisible=false;
dataGridView1.ColumnHeadersVisible=false;
dataGridView1.AllowUserToAddress=false;
dataGridView1[0,0]。所选值=false;
}
getTable
函数没有任何更改

更新:我能够重现您的问题。My
DataGridView
位于启动时未选中的
选项卡页上。通过调用按钮,在选择选项卡之前单击“代码”,我看到了您的错误;当我输入一行以首先选择选项卡