Windows窗体:更改dataGridView的第一个单元格来源?

时间:2015-06-11 15:59:30

标签: c# winforms matrix datagridview

长话短说,我有这个dataGridView,我希望单元格[0,0]成为网格左下角的单元格,而不是像默认情况下那样在网格的左上角。

例如,在视觉上,如果我做了类似的事情:

dataGridView1[0, 0].Value = "a";

I get this (sorry not enough reputation to post pictures)

但我希望通过执行相同的指令,在蓝色突出显示的插槽中显示“a”,并通过添加行等内容添加到网格顶部。

非常感谢提前和问候

2 个答案:

答案 0 :(得分:4)

创建一个这样的类:

public class MyDataGridView : DataGridView
{
    public new DataGridViewCell this[int col, int invertRow]
    {
        get
        {
            int recordCount = this.RowCount - (this.AllowUserToAddRows ? 2 : 1);
            return this.Rows[recordCount - invertRow].Cells[col];
        }
        set
        {
            int recordCount = this.RowCount - (this.AllowUserToAddRows ? 2 : 1);
            this.Rows[recordCount - invertRow].Cells[col] = value;
        }
    }
}

并称之为:

dataGridView1[0, 0].Value = "a";

或者如果您只想在网格的左上角设置或获取第一个单元格,那么您可以使用FirstDisplayedCell属性。

  

MSDN:获取或设置当前在DataGridView中显示的第一个单元格;通常,此单元格位于左上角。

例如:

dataGridView1.FirstDisplayedCell.Value = "a";

答案 1 :(得分:4)

在没有扩展类的情况下,没有本地方法可以做你想做的事情,但是你可以使用扩展方法来为你反转行索引:

public static DataGridViewCell FromLowerLeft(this DataGridView dgv, int columnIndex, int invertedRowIndex)
{
    return dgv[columnIndex, dgv.RowCount - invertedRowIndex];
} 

这可以用作

dataGridView.FromLowerLeft(0,0).Value = "a";