PDA

View Full Version : سوال: ست کردن دو کمبوباکس با یک جدول از بانک



ghasem110deh
دوشنبه 22 دی 1393, 16:37 عصر
چطور میشه یک جدول رو با دو تا کمبوباکس ست کرد ؟
من یه جدول دارم که اطلاعات دوربین توشه (نام دوربین ، مدل ، قیمت و ...) --- الان اطلاعات نام دوربین و مدل رو بایند کردم توی دو تا کمبوباکس ...

private void bindCombo() {
try
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Pooya;Integrated Security=True");
SqlCommand com = new SqlCommand();
DataTable table = new DataTable();
string sql = "Select DISTINCT Cam from Tcam";
con.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, con);
da.Fill(table);
table.Rows.Add("");
comboBox1.DataSource = table;
comboBox1.DisplayMember = "Cam";
comboBox1.ValueMember = "Cam";
comboBox1.SelectedValue = "";
}

حالا میخوام کمبوباکس مدل فقط مدلهای مربوط به دوربین انتخاب شده تو کمبوباکس اول رو نشون بده !
از این کد استفاده کردم ولی نشد :

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Pooya;Integrated Security=True");
SqlCommand com = new SqlCommand();
DataTable table = new DataTable();
string sql = "Select DISTINCT Mod from Tcam Where Cam='" + comboBox1.SelectedItem + "'";
con.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, con);
da.Fill(table);
table.Rows.Add("");
comboBox2.DataSource = table;
comboBox2.DisplayMember = "Mod";
comboBox2.ValueMember = "Mod";
comboBox2.SelectedValue = "";
}

لطفا راهنمایی کنید !

محمد رضا فاتحی
دوشنبه 22 دی 1393, 16:48 عصر
سلام یه اشکال ظاهری داری که کانکشن بسته نشده
و در کل اینطور صورت مساله مطرح کردن راه به جایی نمی بره
حداقل یه توضیحی در مورد جداولت می دادی
و یه مشکل اساسی که وجود داره comboBox1.SelectedItem به آبجکت بر می گردونه که نمی شه تو این مساله خیلی باهاش کار کرد به جاش اینو بنویس comboBox1.Text

ghasem110deh
دوشنبه 22 دی 1393, 17:09 عصر
سلام
کلا 4 تا جدول دارم ...
1- دوربین (آیدی - نام دوربین - مدل - قیمت - کمپانی)
2- خرید (آیدی - شماره فکتور - نام دوربین - مدل - تعداد - قیمت - کل - تاریخ)
3- فروش (آیدی - شناسه - شماره فکتور - نام دوربین - مدل - تعداد - قیمت - کل - تاریخ)
4- مشتری (آیدی - شناسه - نام خریدرا - تلفن - آدرس)

تو فرم خرید و فروش دوتا کمبو گذاشتم که نام دوربین و مدل رو نشون میده ... اما کمبوباکس مدل همه مدل ها رو نشون میده ، میخوام با توجه به نام دوربین انتخاب شده توی کمبوباکس 1 ، مدل های (فقط) اون دوربین نشون داده بشه !

------------------

تغییراتی رو هم که گفتین اعمال کردم ، هیچی نشون میده (کمبوباکس مدل خالیه)

sajadsobh
دوشنبه 22 دی 1393, 21:57 عصر
این واسه اولی:

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Pooya;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("Select DISTINCT Cam from Tcam", con);
DataTable table = new DataTable();
da.Fill(table);
comboBox1.DataSource = table;
comboBox1.DisplayMember = "Cam";
comboBox1.ValueMember = "Cam";

بعدشم شما مقدار display member و value member رو میخوای یکی قرار بدی برای چی؟! معمولاً واسه value member مقدار ID رو قرار میدن.

محمد رضا فاتحی
سه شنبه 23 دی 1393, 08:49 صبح
خوب این که کاری نداره
همینطور که دوستمون گفتن برای اولی لینو بنویس ولی با یه ذره تغییر
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Pooya;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("Select DISTINCT Cam,ID from Tcam", con);
DataTable table = new DataTable();
da.Fill(table);
comboBox1.DataSource = table;
comboBox1.DisplayMember = "Cam";
comboBox1.ValueMember = "ID";


بعدش که کامبو اولیت لود شد می تونی تو رویداد SelectionChangeCommitted با گرفتن مقدار combobox1.SelectedValue که همون آی دی جدول دوربینته به مدلش دسترسی داشته باشی

ghasem110deh
سه شنبه 23 دی 1393, 11:07 صبح
سلام و ممنون با این روش رفتم :

private void bindCombo() {
// try
// {
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Pooya;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("Select DISTINCT Cam,Id from Tcam", con);
DataTable table = new DataTable();
da.Fill(table);
comboBox1.DataSource = table;
comboBox1.DisplayMember = "Cam";
comboBox1.ValueMember = "Id";
// comboBox1.SelectedValue = "";
// }
// catch
// {
// MessageBox.Show("عدم خواندن اطلاعات از جدول نام تجاری دوربین", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
// }
}

و واسه کمبو 2 :

private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e) {
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Pooya;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("Select DISTINCT Mod from Tcam Where Id='" + comboBox1.SelectedValue + "'", con);
DataTable table = new DataTable();
da.Fill(table);
comboBox2.DataSource = table;
comboBox1.DisplayMember = "Id";
// comboBox2.ValueMember = "Id";
}

ولی 3 تا ایراد پیش میاد :
1- تو کمبوی دوربین تکراری هم میاره (چون از id میخونه)
2- وقتی دوربین رو انتخاب میکنی ، کمبو2 قاتی میکنه
3- اسامی دوربین تو کمبوی1 به شماره هاشون تغییر میکنه !!! (عکس 1)
------------------------------------------------------------------------------------
بعد الان وقتی از comboBox1.SelectedValue = ""; استفاده میکنم که مقدار اولیه نداشته باشه خطا میده (عکس 2)

محمد رضا فاتحی
سه شنبه 23 دی 1393, 11:13 صبح
برای مشکل دوم باید DisplayMember رو برابر Cam قرار بدی برای مشکل اولت بهتره از یه جدول کمکی استفاده کنی و اگه از یه نام دوربین چندتا مدل داری اونها رو داخل جدول کمکیت بزاری و بعدش Join کنی اگه مشکل وجود داشت هنوز بگو شمارمو پ.خ کنم تماس بگیر راهنماییت کنم

sajadsobh
سه شنبه 23 دی 1393, 22:42 عصر
نمیدونم منظورتون از نام دوربین و مدل چیه؟!
ولی شما باید نام برند رو از مدل دوربین جدا کنی. یعنی یه جدول واسه برندها تعریف کنید و یه جدول واسه دوربین ها. اینجوری منطقی تره!