C# 数据绑定到DataRowView中的特定字段

C# 数据绑定到DataRowView中的特定字段,c#,winforms,C#,Winforms,给定一个具有不同列(primaryKey、Name、Prefix、NumberSuffix)的数据表,我成功地将其绑定到一个组合框 DataTable dt = [DataTable From Database]; MyComboBox.DataSource = dt; MyComboBox.DisplayMember = "Name"; 我还成功地与各个领域合作,如: DataRowView r = MyComboBox.SelectedItem; MyLabel.Tex

给定一个具有不同列(
primaryKey、Name、Prefix、NumberSuffix
)的数据表,我成功地将其绑定到一个组合框

DataTable dt = [DataTable From Database];
MyComboBox.DataSource = dt;
MyComboBox.DisplayMember = "Name";
我还成功地与各个领域合作,如:

DataRowView r = MyComboBox.SelectedItem;
MyLabel.Text = $"{r.Row.Field<string>("Prefix")}{r.Row.Field<int>("Number")}{r.Row.Field<string>("Suffix")}";
这是失败的。有没有一个简单的方法来实现这一点

编辑:刚刚注意到一个我在上面的描述中遗漏的非常相关的细节

所提到的类
设置
包含在BindingSource中,因为我试图构建一个表单,在该表单中创建各种设置文件,稍后我的应用程序将使用这些文件来相应地执行操作


我的所有其他数据绑定都是在尝试将datatable的ID绑定到设置中的ID时按预期工作的,更重要的是:在加载现有设置时选择正确的DataRow,我不知道如何实现这一点。

我找到了一个解决方案。关键部分是将整个对象存储在settings类中。 考虑这个类:

公共类ClassA
{
公共字符串名称{get;set;}
public int id{get;private set;}
公共类B类B{get;set;}
私有静态int Id=0;
公共类A(字符串名称,类B类B)
{
this.name=名称;
this.classB=classB;
id=++id;
}
}
公共B类
{
公共字符串@value{get;set;}
公共字符串pre{get;set;}
公共类B(字符串@value,字符串pre)
{
这个值=值;
this.pre=pre;
}
}
有一件事我注意到了,但我并不清楚,那就是我只能将数据绑定到属性

然后以以下形式:

BindingSource bsClassA=new BindingSource();
BindingSource bsClassB=新的BindingSource();
私有void Form1\u加载(对象发送方、事件参数e)
{
b类添加(新类B(“第1类”、“第1类-”));
b类添加(新类B(“第2类”、“第2类-”));
b类添加(新的b类(“第3类”、“第3类-”));
添加(新的ClassA(“Test1”,(ClassB)bsClassB[0]);
添加(新的ClassA(“Test2”,(ClassB)bsClassB[1]);
添加(新的ClassA(“Test3”,(ClassB)bsClassB[2]);
LiBo_MyList.DataSource=bsClassA;
LiBo_MyList.DisplayMember=“Name”;
Tx_Id.DataBindings.Add(“Text”,bsClassA,“Id”);
Cb_MyDataset.DataSource=bsClassB;
Cb_MyDataset.DisplayMember=“value”;
L_MyLabel.DataBindings.Add(“Text”,bsClassB,“pre”);
Cb_MyDataset.DataBindings.Add(“SelectedItem”,bsClassA,“classB”);
}
在这里,我现在维护两个独立的BindingSource。钥匙在最后一行。现在可以将组合框的SelectedItem绑定到ClassA的ClassB

请注意,这仍然感觉像是一个解决办法。我宁愿只存储相关数据的ID,并在需要时以其他方式获取数据

MyComboBox.DataBindings.Add("primaryKey", setting, "primaryKey");