3

这对我来说是第一次,我以为我完全失去了理智。我有一个简单的 winform 应用程序,我在其中添加了一个 datagridview。我为 dgv 设置数据源,使用我在其他六个项目中使用过的相同源,并按照我想要的方式配置网格。此时表单上除了网格之外没有其他任何内容,并且项目现在包含一个数据集、一个绑定源和一个表适配器。伟大的。但是,设计者在这样做时生成的代码无效并导致编译错误,告诉我数据集表适配器对象和数据集本身不存在。

如果我进入编译错误所在的设计器,我会看到以下几行:

this.tILEDataSet = new ImageEdit.TILEDataSet();
this.logosTableAdapter = new ImageEdit.TILEDataSetTableAdapters.LogosTableAdapter();

ImageEdit 是我添加了这个绑定控件的类。如果我删除“ImageEdit。”,代码编译并完美运行。当然,由于这是一个设计器生成的文件,一旦我进行任何其他更改,它就会恢复到有问题的代码。

我做了三次,三个不同的项目,两次从头开始用一个新的视觉工作室实例。

导致这种情况发生的原因可能是什么,除了手动编辑设计器文件之外,是否有解决方法,而我从来不喜欢这样做?

我没有改变任何东西,一切都是由设计师生成的。命名空间和类都被创建为 ImageEdit。设计器包含以下定义: private TILEDataSet tILEDataSet;私有 TILEDataSetTableAdapters.LogosTableAdapter logosTableAdapter;

设计器类定义确实派生自 global::System.ComponentModel.Component:

public partial class LogosTableAdapter : global::System.ComponentModel.Component {
    .
.
.

再次感谢您的任何见解。

4

3 回答 3

7

我怀疑您的解决方案中有几个名为 的成员ImageEdit,无论它们是命名空间、类还是其他成员。在 Microsoft's Guidelines for Names中,特别是Names of Names他们推荐:

使用公司名称为命名空间名称添加前缀,以防止来自不同公司的命名空间具有相同的名称和前缀。

不要对命名空间和该命名空间中的类型使用相同的名称。例如,不要将 Debug 用作命名空间名称,并在同一命名空间中提供一个名为 Debug 的类。一些编译器要求这些类型是完全限定的。

不要为单个应用程序模型中命名空间中的类型赋予相同的名称。
例如,如果您正在编写一个供 Windows 窗体应用程序开发人员使用的特殊控件库,则不应引入名为 Checkbox 的类型,因为应用程序模型 (CheckBox) 已经存在具有此名称的类型。

仅第二点就可以解决您的问题。使用第一点,将公司名称作为命名空间的一部分,将导致代码生成器为您的对象提供更简洁的名称,例如:

this.tILEDataSet = new MyCompany.ImageEdit.TILEDataSet();
this.logosTableAdapter = new MyCompany.ImageEdit.TILEDataSetTableAdapters.LogosTableAdapter();
于 2012-08-02T22:50:06.560 回答
0

如果在任何请求命名空间的配置中键入与项目相同的名称或命名空间,这也可能发生:

在此处输入图像描述

这会导致与您现有的命名空间发生冲突:

在此处输入图像描述

只需使用代码中已有的命名空间以外的任何其他名称。

于 2016-10-20T21:16:45.403 回答
0

我知道这是一个旧线程,但是当我遇到同样的问题时遇到了它。我认为我生成的代码导致问题的原因是因为我在保存新表单之前创建了表单并添加了 datagridview 并链接到数据源。如果我创建了表单,保存了它,添加了 DataGridView,保存了表单,然后链接了数据源并保存了它,我不再遇到问题。可能与代码生成器无法看到未保存的代码有关。

于 2017-08-06T15:16:31.930 回答