我在Linux上使用mono的方法DataGridViewColumn.Frozen遇到问题,而使用谷歌搜索这个问题对我没有帮助。

我需要在C#mono应用程序中冻结DataGridView的几列,并且在Windows上可以按预期工作,但是任何时候我将二进制文件复制到Linux PC时,方法Frozen根本不起作用。

我在填充Columns[index].Frozen之前和之后都尝试过Columns[name].FrozenDataGridView

这是我的单声道版本的错误,还是我需要一些其他代码才能完成此工作?
我在SUSE Linux上使用的是mono 2.10(不幸的是,我无法升级)。

UPD

做了一个简单的应用程序,并在mono 4.6.2上进行了测试:与2.10相同,方法Frozen不起作用。

测试应用程式代码:

DataTable _tbl = new DataTable();
_tbl.Columns.Add("Name", typeof(String));
_tbl.Columns.Add("val1", typeof(String));
_tbl.Columns.Add("val2", typeof(String));

_tbl.Rows.Add("1", "val11", "val22");
_tbl.Rows.Add("2", "val11", "val22");

dgvVars.DataSource = _tbl;
dgvVars.Columns["Name"].Frozen = true;
dgvVars.Columns[0].Frozen = true;

最佳答案

Windows窗体是在System.Drawing顶部的Mono中实现的。因此,由于没有P / Invokes,因此遵循该代码或多或少容易。

在撰写本文时(2018年2月),我尚未在DataGridView.cs文件中提到属性Frozen

另外,我找到了DataGridViewTest.cs in searchcode.com。如果对Frozen进行文本搜索,则会发现:

// /* NIE for the moment... */ Assert.AreEqual (true, cell.Frozen, "#cell.Frozen");


我认为这意味着Frozen未实现。由于Xamarin放弃了Windows Forms,所以我不希望很快修复该问题。

恐怕您将不得不自己实施它。

希望这(以某种方式)有所帮助。

07-24 15:00