Visual Studio 2010设计器生成无效代码

时间:2012-08-02 17:29:17

标签: c# winforms datagridview designer

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

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

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

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

我这样做了三次,有三个不同的项目,两次从头开始,带有一个新的visual studio实例。

导致这种情况发生可能会出现什么问题,除了手动编辑设计器文件之外,还有其他问题,我从不喜欢这样做吗?

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

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

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

再次感谢您的任何见解。

3 个答案:

答案 0 :(得分:7)

我怀疑你的解决方案中有几个名为ImageEdit的成员,无论他们是名称空间,类还是其他成员。在Microsoft的Guidelines for Names中,特别是Names of Namespaces,他们建议:

  

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

     

不要对命名空间使用相同的名称,也不要在该命名空间中使用类型。例如,不要将Debug用于名称空间名称,还要在同一名称空间中提供名为Debug的类。有些编译器要求这些类型完全合格。

     

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

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

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

答案 1 :(得分:0)

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

enter image description here

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

enter image description here

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

答案 2 :(得分:0)

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