我需要创建两个组合框,当我在组合框1中选择一个值时,相关值应显示在组合框2中。值取自两个不同的数据库表(deviceCat和Device)。请为我的C#winform应用程序提供帮助。我是c#编程的新手。感谢。
答案 0 :(得分:1)
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("weekdays");
comboBox1.Items.Add("year");
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox2.Items.Clear();
if (comboBox1.SelectedItem == "weekdays")
{
comboBox2.Items.Add("Sunday");
comboBox2.Items.Add("Monday");
comboBox2.Items.Add("Tuesday");
}
else if (comboBox1.SelectedItem == "year")
{
comboBox2.Items.Add("2012");
comboBox2.Items.Add("2013");
comboBox2.Items.Add("2014");
}
}
}
}
答案 1 :(得分:0)
您可以使用OnSelectedValueChanged事件处理程序触发代码清除并重新填充第二个组合框中的数据
答案 2 :(得分:0)
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBox1.Text)
{
case "Something":
comboBox2.Items.Clear();
comboBox2.Items.Add("Option1");
comboBox2.Items.Add("Option2");
comboBox2.Items.Add("Option3");
break;
case "Something else":
comboBox2.Items.Clear();
comboBox2.Items.Add("Option4");
comboBox2.Items.Add("Option5");
comboBox2.Items.Add("Option6");
break;
default:
break;
}
}
如果你这样做,它应该有效。这样做是检查combobox1
中的文本,然后相应地修改第二个文本
答案 3 :(得分:0)
只是一个快速的模型:
var cb1 = new ComboBox();
var cb2 = new ComboBox();
cb1.Items.AddRange(firstItems); // whatever you want to put into the first ComboBox
cb2.Items.AddRange(secondItems); // whatever you want to put into the second ComboBox
public void ChangeSelectionInSecondComboBox(object sender, EventArgs e)
{
var selectedItem = cb1.SelectedItem;
if(selectedItem == [...]) // depends on how you want to decide which item
to display in ComboBox2
{
cb2.SelectedIndex = [...] // you need to decide which Index to set
}
}
cb1.SelectedIndexChanged += ChangeSelectionInSecondComboBox;
基本上,您想要的是收听第一个SelectionChanged
的{{1}}事件,然后在第二个ComboBox
中选择相关项。
答案 4 :(得分:0)
您只需要利用master组合框的selectIndexChanged事件来更新相关组合框中的selectedItem。
这是一个例子。我有两节课。客户端类和Contract类。每个客户都有合同
这是契约类:
public class Contract
{
public String ContractNumber { get; set; }
public Contract(String contractNumber)
{
ContractNumber = contractNumber;
}
public override string ToString()
{
return "Contract Number :" + ContractNumber;
}
}
这是Client类:
public class Client
{
public String Name { get; set; }
public Contract SignedContract { get; set; }
public Client(String name, Contract contract)
{
Name = name;
SignedContract = contract;
}
public override string ToString()
{
return "Client " + Name;
}
}
一些示例工作的示例数据(在windows窗体的formLoad事件中调用)
Contract c1 = new Contract("NRCONTRACT0001");
Contract c2 = new Contract("NRCONTRACT0005");
Contract c3 = new Contract("NCAB_84_PK65");
Client cl1 = new Client("BTHOS", c1);
Client cl2 = new Client("FTIA Consulting", c2);
Client cl3 = new Client("GAMMA INFO", c3);
Client[] clients = new Client[] {cl1,cl2,cl3};
Contract[] contracts = new Contract[] {c1, c2, c3};
comboBox1.Items.AddRange(clients);
comboBox2.Items.AddRange(contracts);
然后在第一个combox框中选择index changed事件,我拿起对象并将其转换为Client以利用客户端和合同之间的关系
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox2.SelectedItem = ((Client)comboBox1.SelectedItem).SignedContract;
}
工作正常。
答案 5 :(得分:0)
这是我到目前为止所拥有的
private void cmbFaultCat1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlCommand cmd2 = new SqlCommand("SELECT * FROM tblFault WHERE faultCat='" + cmbFaultCat1.SelectedItem + "'", con);
SqlDataReader myReader2;
// Combo Relationship
try
{
con.Open();
myReader2 = cmd2.ExecuteReader();
while (myReader2.Read())
{
cmbDevice1.Items.Add(myReader2["fault"]);
}
con.Close();
//con.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
仍显示表格中的所有数据..
答案 6 :(得分:0)
private DataSet m_ds = new DataSet();
private CurrencyManager m_Currency;
private void Form8_Load(object sender, EventArgs e)
{
DataTable T1 = m_ds.Tables.Add("T1");
T1.Columns.Add("T");
T1.Columns.Add("V");
DataRow T1_ROW = T1.NewRow();
T1_ROW["T"] = "1";
T1_ROW["V"] = "1";
T1.Rows.Add(T1_ROW);
T1_ROW = T1.NewRow();
T1_ROW["T"] = "2";
T1_ROW["V"] = "2";
T1.Rows.Add(T1_ROW);
T1_ROW = T1.NewRow();
T1_ROW["T"] = "3";
T1_ROW["V"] = "3";
T1.Rows.Add(T1_ROW);
T1_ROW = T1.NewRow();
T1_ROW["T"] = "4";
T1_ROW["V"] = "4";
T1.Rows.Add(T1_ROW);
comboBox1.DataSource = T1;
comboBox1.DisplayMember = "T";
comboBox1.ValueMember = "V";
m_Currency = this.BindingContext[m_ds, "T1"] as CurrencyManager;
DataTable T2 = m_ds.Tables.Add("T2");
T2.Columns.Add("ID");
T2.Columns.Add("T");
T2.Columns.Add("V");
DataRow T2_ROW = T2.NewRow();
T2_ROW["ID"] = "1";
T2_ROW["T"] = "1-1";
T2_ROW["V"] = "1-1";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "1";
T2_ROW["T"] = "1-2";
T2_ROW["V"] = "1-2";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "1";
T2_ROW["T"] = "1-3";
T2_ROW["V"] = "1-3";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "1";
T2_ROW["T"] = "1-4";
T2_ROW["V"] = "1-4";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "2";
T2_ROW["T"] = "2-1";
T2_ROW["V"] = "2-1";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "2";
T2_ROW["T"] = "2-2";
T2_ROW["V"] = "2-2";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "2";
T2_ROW["T"] = "2-3";
T2_ROW["V"] = "2-3";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "2";
T2_ROW["T"] = "2-4";
T2_ROW["V"] = "2-4";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "3";
T2_ROW["T"] = "3-1";
T2_ROW["V"] = "3-1";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "3";
T2_ROW["T"] = "3-2";
T2_ROW["V"] = "3-2";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "3";
T2_ROW["T"] = "3-3";
T2_ROW["V"] = "3-3";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "3";
T2_ROW["T"] = "3-4";
T2_ROW["V"] = "3-4";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "4";
T2_ROW["T"] = "4-1";
T2_ROW["V"] = "4-1";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "4";
T2_ROW["T"] = "4-2";
T2_ROW["V"] = "4-2";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "4";
T2_ROW["T"] = "4-3";
T2_ROW["V"] = "4-3";
T2.Rows.Add(T2_ROW);
T2_ROW = T2.NewRow();
T2_ROW["ID"] = "4";
T2_ROW["T"] = "4-4";
T2_ROW["V"] = "4-4";
T2.Rows.Add(T2_ROW);
System.Data.DataColumn T1_V = null;
System.Data.DataColumn T2_V = null;
T1_V = m_ds.Tables["T1"].Columns["V"];
T2_V = m_ds.Tables["T2"].Columns["ID"];
System.Data.DataRelation REL = new DataRelation("COM_ID", T1_V, T2_V);
m_ds.Relations.Add(REL);
comboBox2.DataSource = m_ds;
comboBox2.DisplayMember = "T1.COM_ID.T";
comboBox2.DisplayMember = "T1.COM_ID.V";
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataRow[] Rows = m_ds.Tables["T1"].Select("V = '" + Convert.ToString(comboBox1.SelectedValue) + "'");
if (Rows.Count() < 1)
return;
m_Currency.Position = m_ds.Tables["T1"].Rows.IndexOf(Rows[0]);
}
答案 7 :(得分:0)
Shaibu,我知道为时已晚,但它可能会帮助某人 只需添加此行代码cmbDevice1.Items.Clear(); 在此行之前cmbDevice1.Items.Add(myReader2 [“”]);