我有1个具有数据源(数据库)的组合框,我使用LINQ。 这在我的代码中:
private void Return_Load(object sender, EventArgs e)
{
button1.Enabled = false;
var buka = (from db in Program.data.Transactions where db.ReturnDate == null select db);
comboBox1.DataSource = buka;
comboBox1.SelectedIndex = -1;
} // my form load
这是我的组合框选择索引:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var open = (from db in Program.data.Transactions where db.TransactionID == comboBox1.Text select db).FirstOrDefault();
label10.Text = open.StaffID;
label11.Text = open.ClientName;
label12.Text = open.CarID;
label13.Text = open.StartDate.ToString();
label14.Text = open.EndDate.ToString();
label15.Text = DateTime.Now.ToString("dd MM yyyy");
var car = (from db in Program.data.MsCars where db.CarID == label12.Text select db).FirstOrDefault();
int rentduration;
int lateduration;
double extrachange;
double totalprice;
string a = car.Price.ToString();
rentduration = open.EndDate.Value.DayOfYear - open.StartDate.Value.DayOfYear;
lateduration = DateTime.Now.DayOfYear - open.EndDate.Value.DayOfYear;
totalprice = rentduration * double.Parse(a);
label17.Text = totalprice.ToString();
}
我的问题是如何从数据库中添加combobox数据源?考虑使用组合框架。
答案 0 :(得分:0)
我不确定我是否完全理解这个问题,但是如果你的组合框在组合框中为LINQ查询中的每个结果显示Program.data.Transactions
(由Return_Load
方法假设) ,您需要查看DisplayMember
属性以查找要向用户显示的值(显示)和ValueMember
以查找您希望使用的值,例如TransactionID
您还可能需要调用ToList()函数来枚举记录 -
var buka = (from db in Program.data.Transactions where db.ReturnDate == null select db).ToList();
一旦您获得了ValueMember设置,您就会将combobox1.Text
替换为combobox1.SelectedValue
(相应地转换为相关数据类型)
将combobox1的DisplayMember和ValueMember设置为' TransactionID' (以便显示和使用相同的值),然后在您的SelectedIndexChanged处理程序中,您可以使用:
var open = (from db in Program.data.Transactions where db.TransactionID == (object_type)comboBox1.SelectedValue select db).FirstOrDefault();
...确保用实际类型替换object_type
,无论是字符串,整数等等。
......和......
var car = (from db in Program.data.MsCars where db.CarID == open.CarID select db).FirstOrDefault();
请务必测试NullReferenceExceptions并处理如果记录不能正常存在会发生什么。