C# 使用类型化数据集时选择一行

C# 使用类型化数据集时选择一行,c#,winforms,.net-3.5,dataset,typed,C#,Winforms,.net 3.5,Dataset,Typed,我的项目中有一个类型化数据集。我想用一行而不是所有行填充数据表。所选行必须基于主键列。我知道我可以修改设计器代码以实现此功能,但是如果我在设计器中更改代码,则在将来通过设计器更新数据时,可能会删除此代码 因此,我想在启动MyTypedTableAdapter.Fill方法之前,不在设计器中更改SelectCommand。奇怪的是,设计器没有创建SelectCommand!它创建所有其他命令,但不创建此命令。如果它将创建SelectCommand,我可以这样修改它: this.operatorzy

我的项目中有一个类型化数据集。我想用一行而不是所有行填充数据表。所选行必须基于主键列。我知道我可以修改设计器代码以实现此功能,但是如果我在设计器中更改代码,则在将来通过设计器更新数据时,可能会删除此代码

因此,我想在启动
MyTypedTableAdapter.Fill
方法之前,不在设计器中更改
SelectCommand
。奇怪的是,设计器没有创建
SelectCommand
!它创建所有其他命令,但不创建此命令。如果它将创建
SelectCommand
,我可以这样修改它:

this.operatorzyTableAdapter.Adapter.SelectCommand.CommandText += " WHERE MyColumn = 1";
这远非完美,但至少我不必修改设计师的作品。不幸的是,正如我前面所说,
SelectCommand
没有创建。相反,designer创建了如下内容:

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
private void InitCommandCollection() {
    this._commandCollection = new global::System.Data.SqlClient.SqlCommand[1];
    this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
    this._commandCollection[0].Connection = this.Connection;
    this._commandCollection[0].CommandText = "SELECT Ope_OpeID, Ope_Kod, Ope_Haslo, Ope_Imie, Ope_Nazwisko FROM dbo.Operatorzy";
    this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
}
我认为这没有道理。为什么要创建
UpdateCommand
InsertCommand
DeleteCommand
但不创建
SelectCommand
?我可以忍受,但是
这个。_commandCollection
是私有的,所以我不能在类代码之外访问它

我不知道如何在不改变设计师代码的情况下进入这个集合。我的想法是通过部分类定义公开集合。然而,我想介绍许多类型化数据集,我真的不想为它们中的每一个创建部分类定义

请注意,我使用的是.NET3.5

我找到了一篇关于访问私有属性的文章,但它涉及.NET4.0


谢谢您的时间。

在数据集设计器中,首先使用基本(所有行)查询配置表/适配器对。确保它工作正常,并更新/删除等

然后右键单击“添加查询”,并将SQL文本更改为包含“WHERE MyId=@Id”。确保保留相同的列。选择Next并调用生成的方法“FillById()”


当然,在正确的位置使用FillById(id)而不是Fill()。

谢谢Henk。这会起作用,但我必须对每个数据集都这样做。您能再告诉我一件事吗:有没有一种方法可以在经过一段时间后自动更新数据集(表结构更改)。如果是,如何做到这一点?