在C#编码的值成员中添加2个或多个字段

本文关键字:2个 字段 添加 编码 成员 | 更新日期: 2023-09-27 18:28:53

我有一个包含4个主键字段的表。我将其加载到使用C#创建的WinForm应用程序的下拉列表中。

在下拉列表的TextChanged事件上,我有特定的TextBox,我想为我在下拉列表中选择的特定字段填充表收到的信息。

正如我所说的,这个表有4个字段。我可以从数据集中将这4个字段全部放入值成员中吗?或者你能告诉我这是否不可能吗?

谢谢。

Datatable dt=dba.getName(); cmb_name.ValueMember="id"; cmb_name.DisplayMember="name"; cmb_name.DataSource=dt;

这是正常格式。。但是我有更多的关键字段。。所以我需要添加更多的关键字段。。

在C#编码的值成员中添加2个或多个字段

您可以使用DataSource属性将源数据绑定到ComboBox(例如实体列表或DataTable等),然后将ComboBox的DisplayMember属性设置为要显示的字段的(字符串)名称。

用户选择一个Item后,您可以将SelectedItem强制转换回原始行数据类型(Entity、DataRow等-它仍然是您输入的类型),然后您可以检索到原始Item的4个复合键。

这样可以完全避免SelectedValue问题。

编辑

按如下方式填充:

cmb_name.DisplayMember = "name";
cmb_name.DataSource = dt;
// Ignore ValueMember and Selected Value entirely

当您想要检索所选项目时

var selectedRow = (cmb_name.SelectedItem as DataRowView );

现在您可以检索PK的4个值,例如selectedRow["field1"], selectedRow["field2"], selectedRow["field3"] etc

但是,如果您的意思是要DISPLAY4列给用户(即与表键无关),请参阅此处如何绑定组合框,使显示成员是源数据表的2个字段的连接?

cmb_name.DisplayMember = "name";
cmb_name.DataSource = dt;
DataRowView selectedRow = (cmb_name.SelectedItem as DataRowView );

结果如下:

MessageBox.Show(selectedRow.Row[0].ToString());
MessageBox.Show(selectedRow.Row[1].ToString());
MessageBox.Show(selectedRow.Row[2].ToString());
MessageBox.Show(selectedRow.Row[3].ToString());
.....

如果您想从List中的组合框中获取一些数据,可以使用类似的东西

List<string> ListOfComboData = new List<string>();
ListOfComboData = yourComboBox.Items.OfType<string>().ToList<string>();

我真的不知道这是否是你的意思,因为这个问题的结构非常糟糕。我希望这能帮助。。。

编辑:要将所选文本放入某些TextBox,请使用

yourTextBox.Text = youComboBox.Text;

在您的ComboBoxSelectedIndexChanged事件中。

您可以使用以下类来遵循这里的方法:

public class ComboBoxItem
{
   public string Text { get; set; }
   public object[] PrimaryKey { get; set; }
}
private void Test()
{
    ComboboxItem item = new ComboboxItem();
    item.Text = "Item text1";
    item.PrimaryKey = new object[] { primaryKey1, primaryKey2, primaryKey3, primaryKey4};
    comboBox1.Items.Add(item);
    comboBox1.SelectedIndex = 0;
    MessageBox.Show((comboBox1.SelectedItem as ComboboxItem).Value.ToString());
}