在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;
这是正常格式。。但是我有更多的关键字段。。所以我需要添加更多的关键字段。。
您可以使用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;
在您的ComboBox
的SelectedIndexChanged
事件中。
您可以使用以下类来遵循这里的方法:
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());
}