PDA

View Full Version : سوال: مشکل در درج گزینه های موجود در ComboBox



masoud.a
شنبه 14 اردیبهشت 1392, 15:45 عصر
سلام
یه سری اطلاعات که در TextBox نوشته میشه در جدول درج میشه.حالا میخوام یه ComboBox به آخرش اضافه کنم که کاربر بین گزینه های موجود یکیو انتخاب کنه.این کد رو براش نوشتم،تا قبل از اضافه کردن ComboBox کارش رو درست انجام میداد ولی بعدش کار نمیکنه:

cmd.CommandText = "Insert Into tbl_Melk(masahat,bana,UserIdRef) Values ( '" + textBox1.Text + "', '" + textBox2.Text + "','" + comboBox1.SelectedIndex + "')";

khokhan
شنبه 14 اردیبهشت 1392, 15:53 عصر
سلام
یه سری اطلاعات که در TextBox نوشته میشه در جدول درج میشه.حالا میخوام یه ComboBox به آخرش اضافه کنم که کاربر بین گزینه های موجود یکیو انتخاب کنه.این کد رو براش نوشتم،تا قبل از اضافه کردن ComboBox کارش رو درست انجام میداد ولی بعدش کار نمیکنه:

cmd.CommandText = "Insert Into tbl_Melk(masahat,bana,UserIdRef) Values ( '" + textBox1.Text + "', '" + textBox2.Text + "','" + comboBox1.SelectedIndex + "')";

با سلام

البته بهتر بود از پرامترها استفاده می کردی یه چیزی شبیه این :


SqlCommand command = new SqlCommand("insert into frosh( date,cost_id,kala_name,kala_code,price,tedad,total _price) values(@date,@cost_id,@kala_name,@kala_code,@price ,@tedad,@total_price)", con);
command.Parameters.AddWithValue("@date", textBox1.Text);
command.Parameters.AddWithValue("@cost_id", textBox6.Text);
command.Parameters.AddWithValue("@kala_name", comboBox1.Text);

اما اگه از کد خودتون استفاده کنین اینطوری اصلاحش کنین :

cmd.CommandText = "Insert Into tbl_Melk(masahat,bana,UserIdRef) Values ( '" + textBox1.Text + "', '" + textBox2.Text + "','" + comboBox1.Text + "')";

یااینطوری

cmd.CommandText = "Insert Into tbl_Melk(masahat,bana,UserIdRef) Values ( '" + textBox1.Text + "', '" + textBox2.Text + "','" + comboBox1.SelectedIndex.value + "')";

Mahmoud.Afrad
شنبه 14 اردیبهشت 1392, 17:16 عصر
باید به selectedValue رو ذخیره کنید. دو طرف این مقدار هم تک کوتیشن نمیخواد.
cmd.CommandText = "Insert Into tbl_Melk(masahat,bana,UserIdRef) Values ( '" + textBox1.Text + "', '" + textBox2.Text + "'," + comboBox1.SelectedValue + ")";
و حتما از پارامترها استفاده کنید.

masoud.a
یک شنبه 15 اردیبهشت 1392, 12:37 عصر
باید به selectedValue رو ذخیره کنید. دو طرف این مقدار هم تک کوتیشن نمیخواد.
cmd.CommandText = "Insert Into tbl_Melk(masahat,bana,UserIdRef) Values ( '" + textBox1.Text + "', '" + textBox2.Text + "'," + comboBox1.SelectedValue + ")";
و حتما از پارامترها استفاده کنید.

از SelectedIndex باید استفاده بشه ولی اگه دوتا ComboBox استفاده بشه برنامه دیگه جواب نمیده.واسه حل این مشکل چیکار کنم؟
این error رو میگیره:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tbl_Melk_tbl_NoeMelk". The conflict occurred in database "DB_Amlak", table "dbo.tbl_NoeMelk", column 'NoeMelk_ID'.
The statement has been terminated.

veniz2008
یک شنبه 15 اردیبهشت 1392, 13:20 عصر
سلام.
مشکل شما نه بخاطر کدنویسی بلکه بخاطر رعایت نکردن کلید خارجی معتبر هست.
شما میخوای چیزی رو بعنوان کلید خارجی درج کنی که قبلا در جدول اولیه درج نشده (ظاهرا جدول NoeMelk ).
حتما بایستی اول مقادیر داخل کمبو، در جدول اصلی شما ثبت شده باشن و بعد میتونید مقدار رو در جدول مورد نظرتون که کلید خارجی داره ثبت کنید.
موفق باشید.

masoud.a
یک شنبه 15 اردیبهشت 1392, 14:45 عصر
سلام.
مشکل شما نه بخاطر کدنویسی بلکه بخاطر رعایت نکردن کلید خارجی معتبر هست.
شما میخوای چیزی رو بعنوان کلید خارجی درج کنی که قبلا در جدول اولیه درج نشده (ظاهرا جدول NoeMelk ).
حتما بایستی اول مقادیر داخل کمبو، در جدول اصلی شما ثبت شده باشن و بعد میتونید مقدار رو در جدول مورد نظرتون که کلید خارجی داره ثبت کنید.
موفق باشید.
کمبو باکس داره با مقادیر موجود در جدولش پر میشه.بین اونا انتخاب میکنم

fool66
یک شنبه 15 اردیبهشت 1392, 15:03 عصر
چرا از SelectedIndex استفاده کردی فکر کنم باید از SelectedValue استفاده می کردی

fool66
یک شنبه 15 اردیبهشت 1392, 15:09 عصر
برای پر کردن کمبوباکس از این کد استفاده کن
DataTable dt = new DataTable();
dt.Clear();
string cmd = "SELECT Value1,Value2 FROM Data";
SqlDataAdapter da = new SqlDataAdapter(cmd, con1);
da.Fill(dt);
ComboBox1.DisplayMember = "Value1";
ComboBox1.ValueMember = "Value2";
ComboBox1.DataSource = dt;

Mahmoud.Afrad
یک شنبه 15 اردیبهشت 1392, 18:11 عصر
اگر ValueMember کمبوباکس رو ست کرده باشید باید از SelectedValue(همان آی دی انتخابی خواهد بود) استفاده کنید و اونو به عنوان کلید خارجی ثبت کنید.

masoud.a
دوشنبه 16 اردیبهشت 1392, 00:21 صبح
اگر ValueMember کمبوباکس رو ست کرده باشید باید از SelectedValue(همان آی دی انتخابی خواهد بود) استفاده کنید و اونو به عنوان کلید خارجی ثبت کنید.
ببخشید میشه یکم بیشتر توضیح بدید که چکار باید بکنم

fool66
دوشنبه 16 اردیبهشت 1392, 01:02 صبح
ببخشید میشه یکم بیشتر توضیح بدید که چکار باید بکنم

کدی که باهاش کمبوباکس رو با جدول پر میکنی رو بزار

veniz2008
دوشنبه 16 اردیبهشت 1392, 06:59 صبح
ببخشید میشه یکم بیشتر توضیح بدید که چکار باید بکنم
ببینید اگر فرض کنیم که کمبوباکس شما 5 عنصر داشته این عناصر دارای ایندکس های 0 تا 4 هستن.
مثلا فرض کنید شما 5 تا کالا دارید که کد کالاهای شما از 1000 شروع شده و تا 1004 ادامه داشته باشه.
حالا این کالاها رو میریزید داخل کمبو. این 5 کالا دارای ایندکس های 0 تا 4 هستن (همیشه ایندکس از 0 شروع میشه) ولی ارزش هر کالا (ValueMember ) یه چیز متفاوت هست و در واقع مقادیر بین 1000 تا 1004 هست. وقتی شما در کدنویسی برنامتون از SelectedIndex استفاده میکنید و با فرض اینکه 5 عنصر داشته باشی، یکی از اعداد 0 تا 4 برای جدول شما ارسال میشه درصورتیکه sql انتظار داره که بعنوان کلید خارجی یکی از اعداد 1000 تا 1004 رو براش بفرستی. اینجاست که کلید خارجی نامعتبر تشخیص داده میشه و اون پیغام خطا رو به شما نشون میده.
کمبوباکس دو خاصیت مهم داره یکی DisplayMember یعنی همون چیزی که کاربر بعنوان ظاهر کمبوباکس می بینه مثلا در مثال زیر کاربر نام کالاها رو می بینه. پس DisplayMember اونو برابر با فیلد جدولم که نام کالاها رو نگهداری میکنه قرار دادم (KalaName). خاصیت دوم هم ارزش (کد) هر آیتم ریخته شده در کمبوباکس هست که بهش ValueMember گفته میشه. مثلا کالای "هارد دیسک" کدش 1000 یا کالای "سی پی یو" کدش 1001 و ...
اینطوری متوجه میشیم که اگر کاربر از کمبو مثلا هارد دیسک رو انتحاب کرد کد اون محصول چند هست.
از کد زیر برای پر کردن کمبو استفاده کنید.

SqlConnection con = new SqlConnection("server = .\\md2008;database = Test1;Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("Select * from TblKala", con);
DataTable dt = new DataTable();
da.Fill(dt);
CmbKala.DataSource = dt;
Cmbkala.DisplayMember = "KalaName";
CmbKala.ValueMember = "KalaID";
اما برای استفاده کردن از کمبو مثلا برای درج یا حذف یا ... از کد زیر استفاده کنید. برای استفاده از ارزش (Value) هر آیتم انتخاب شده از کمبوباکس باید از SelectedValue (ارزش آیتم انتخاب شده) استفاده کنید.

cmd.CommandText = "Insert Into tbl_Melk(masahat,bana,UserIdRef) Values(@masahat,@bana,@useridref);
cmd.Parameters.AddWithValue("@masahat", textBox1.Text.Trim());
cmd.Parameters.AddWithValue("@bana", textBox2.Text.Trim());
cmd.Parameters.AddWithValue("@useridref", comboBox1.SelectedValue);
موفق باشید.

masoud.a
دوشنبه 16 اردیبهشت 1392, 20:42 عصر
ممنون از جواباتون.آخرش این شکلی حلش کردم:
اول در Form_Load اون صفحه ای که کارای درج و حذف رو انجام میدم کلید اصلی جدول رو به ValueMember اضافه میکنم بعد در قسمت CommandText هر کدوم از کلید حارجی ها رو با SelectedValue به کمبو باکسش ارتباط میدم از استاد Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud.Afrad) هم خیلی ممنونم که فکر ValueMember رو به یادم انداخت:تشویق:[/URL][URL="http://barnamenevis.org/member.php?71297-Mahmoud.Afrad"] (http://barnamenevis.org/member.php?71297-Mahmoud.Afrad)