DataGridView的Width属性始终返回NULL

时间:2018-10-01 21:15:25

标签: c# winforms nullpointerexception

我有一个DataGridView来填充DataSource,例如:

this.dgvBackchecks.DataSource = db.GetTableBySQL($"exec usp_Backcheck_Get_List");

它可以正常工作,并根据需要返回列:

enter image description here

因此,我使用DataGridView的属性将某些项目设置为false:

this.dgvBackchecks.Columns["ProjectKey"].Visible = false;
this.dgvBackchecks.Columns["DesignKey"].Visible = false;
this.dgvBackchecks.Columns["BackColor"].Visible = false;

它正在工作,问题是当我尝试更改Job No列宽时:

this.dgvBackchecks.Columns["Job No"].Width = 45;

它总是抛出Null异常:

  

System.NullReferenceException:'对象引用未设置为   对象的实例。'

要进行简单测试并确认Job No不为空,我尝试将Job No的visible设置为false,就像其他列一样:

 this.dgvBackchecks.Columns["Job No"].Visible = false;

它起作用了,所以在列列中是否存在列不是问题,因为列已经存在。我真的不明白那里出了什么问题。

完整代码:

 this.dgvBackchecks.DataSource = db.GetTableBySQL($"exec usp_Backcheck_Get_List");

            this.dgvBackchecks.Columns["ProjectKey"].Visible = false;
            this.dgvBackchecks.Columns["DesignKey"].Visible = false;
            this.dgvBackchecks.Columns["BackColor"].Visible = false;
            this.dgvBackchecks.Columns["Job No"].Visible = false; //This works
            this.dgvBackchecks.Columns["Job No"].Width = 45; //This no works

Width属性有什么问题?

1 个答案:

答案 0 :(得分:1)

您可以在设置AutoSizeMode之前尝试设置列Width的属性

this.dgvBackchecks.Columns["Job No"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
this.dgvBackchecks.Columns["Job No"].Width = 60;