PDA

View Full Version : سوال: مشکل در خواندن اطلاعات جدول و نمایش ان در کامبوباکس



vahidth
چهارشنبه 25 بهمن 1391, 16:40 عصر
سلام دوستان من یه مشکل برام پیش اومده من دو تا جدول رو باهم ارتباط دادم جدول( نسیه) و جدول (فروش)
100007
و در فرم اول برای ثبت اطلاعات این کد رو نوشتم.
if (txtcode.Text == "")
{
MessageBox.Show("کاربر گرامی لطفا کد شخص را وارد کنید. فیلد کد نمی تواند خالی باشد");
}
else

try
{
DialogResult Result_Save = MessageBox.Show("آیا اطلاعات در بانک ذخیره شود", "پیغام", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (Result_Save == DialogResult.Yes)
{
con.Open();
SqlCommand my_cn = new SqlCommand("insert into table1(id,name) values(@cd_temp,@name_temp)", con);
my_cn.Parameters.AddWithValue("@cd_temp", Int32.Parse(txtcode.Text));
my_cn.Parameters.AddWithValue("@name_temp", txtname.Text);


my_cn.ExecuteNonQuery();
Form1_Load(sender, e);
MessageBox.Show("اطلاعات با موفقیت ثبت شد");


}

}
catch (SqlException ex)
{
if (ex.Number == 2627)//درصورتی که کد کالا تکراری بود
{

MessageBox.Show("این کد در بانک وجود دارد");

}
}


finally
{
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}
100008
و در فرم دوم هم این کد ها رو نوشتم اما نمیدونم چطوری باید در اینجا وقتی روی کامبوباکس کلیک کردم بره اطلاعات جدول 1 یا همون جدول نسیه رو برام بیاره و نشون بده؟
و چطوری باید اطلاعات کامبو باکس رو در دیتاگرید ذخیره کنم؟
if (txt1.Text == "")
{
MessageBox.Show("کاربر گرامی لطفا کد شخص را وارد کنید. فیلد کد نمی تواند خالی باشد");
}
else

try
{
DialogResult Result_Save = MessageBox.Show("آیا اطلاعات در بانک ذخیره شود", "پیغام", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (Result_Save == DialogResult.Yes)
{
con.Open();
SqlCommand my_cn = new SqlCommand("insert into table2(code_kala,name_kala,tedad,gimat) values(@cd_temp,@name_temp,tedad_temp,gimat_temp)", con);
my_cn.Parameters.AddWithValue("@cd_temp", Int32.Parse(txt1.Text));
my_cn.Parameters.AddWithValue("@name_temp", txt2.Text);
my_cn.Parameters.AddWithValue("@tedad_temp", txt3.Text);
my_cn.Parameters.AddWithValue("@gimat_temp", txt4.Text);


my_cn.ExecuteNonQuery();

MessageBox.Show("اطلاعات با موفقیت ثبت شد");


}

}
catch (SqlException ex)
{
if (ex.Number == 2627)//درصورتی که کد کالا تکراری بود
{

MessageBox.Show("این کد در بانک وجود دارد");

}
}


finally
{
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}
100009

vahidth
چهارشنبه 25 بهمن 1391, 21:02 عصر
از دوستان کسی نبود کمک کنه؟

vahidth
چهارشنبه 25 بهمن 1391, 21:49 عصر
یعنی هیچ کس بلد نیست بابا دو جدول رو چطوری باهم جوین کنیم و در فرم دوم اطلاعات کد فرد رو در کامبوباکس بیاریم

khokhan
چهارشنبه 25 بهمن 1391, 22:05 عصر
درود بر شما

رشته اتصالت به دیتابیس چگونه است ؟ از دیتاست استفاده کردی یا از دیتا تیبل ؟

vahidth
پنج شنبه 26 بهمن 1391, 08:40 صبح
اسم جداول که در عکس مشخص نیست.
طراحی دیتابیس شما اشتباهست(حداقل همین دو جدول نقص دارند).
در دیتابیس یک diagram ایجاد کن و عکسشو بزار توی همون تاپیکی که برای تحلیل ایجاد کرده بودی(نه این تاپیک) تا بچه ها اشکالات رو بهت بگن.

قبل از برنامه نویسی هم یک مروری روی دستورات sql داشته باشید بد نیست ناسلامتی برنامه نویس هستید دیگه.

درود بر شما

رشته اتصالت به دیتابیس چگونه است ؟ از دیتاست استفاده کردی یا از دیتا تیبل ؟
از دیتا تیبل داداش گلم

این فقط برای تست هست داداش میخوام بدونم چطوری دو جدول رو باهم ارتباط بدم فقط میخوام یاد بگیرم داداش
اینم عکس دیاگرام
100050
این کد اولین فرم برای درج کاربر جدید
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace project3
{
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\db2.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataView dv = new DataView();
DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
}

private void btnsapt_Click(object sender, EventArgs e)
{
if (txtcode.Text == "")
{
MessageBox.Show("کاربر گرامی لطفا کد شخص را وارد کنید. فیلد کد نمی تواند خالی باشد");
}
else

try
{
DialogResult Result_Save = MessageBox.Show("آیا اطلاعات در بانک ذخیره شود", "پیغام", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (Result_Save == DialogResult.Yes)
{
con.Open();
SqlCommand my_cn = new SqlCommand("insert into table1(id,name) values(@cd_temp,@name_temp)", con);
my_cn.Parameters.AddWithValue("@cd_temp", Int32.Parse(txtcode.Text));
my_cn.Parameters.AddWithValue("@name_temp", txtname.Text);


my_cn.ExecuteNonQuery();
Form1_Load(sender, e);
MessageBox.Show("اطلاعات با موفقیت ثبت شد");


}

}
catch (SqlException ex)
{
if (ex.Number == 2627)//درصورتی که کد کالا تکراری بود
{

MessageBox.Show("این کد در بانک وجود دارد");

}
}


finally
{
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}
}

private void Form1_Load(object sender, EventArgs e)
{
da = new SqlDataAdapter("select * from table1", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Columns[0].HeaderText = "کد شخصی";
dataGridView1.Columns[1].HeaderText = "نام";

}
}
}


اینم کد فرم دوم برای فروش
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace project3
{


public partial class Form2 : Form
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\db2.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataView dv = new DataView();
DataTable dt = new DataTable();

public Form2()
{
InitializeComponent();
}

private void btnsave_Click(object sender, EventArgs e)
{
if (txt1.Text == "")
{
MessageBox.Show("کاربر گرامی لطفا کد شخص را وارد کنید. فیلد کد نمی تواند خالی باشد");
}
else

try
{
DialogResult Result_Save = MessageBox.Show("آیا اطلاعات در بانک ذخیره شود", "پیغام", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (Result_Save == DialogResult.Yes)
{
con.Open();
SqlCommand my_cn = new SqlCommand("insert into table2(code_kala,name_kala,tedad,gimat) values(@cd_temp,@name_temp,tedad_temp,gimat_temp)", con);
my_cn.Parameters.AddWithValue("@cd_temp", Int32.Parse(txt1.Text));
my_cn.Parameters.AddWithValue("@name_temp", txt2.Text);
my_cn.Parameters.AddWithValue("@tedad_temp", txt3.Text);
my_cn.Parameters.AddWithValue("@gimat_temp", txt4.Text);


my_cn.ExecuteNonQuery();

MessageBox.Show("اطلاعات با موفقیت ثبت شد");


}

}
catch (SqlException ex)
{
if (ex.Number == 2627)//درصورتی که کد کالا تکراری بود
{

MessageBox.Show("این کد در بانک وجود دارد");

}
}


finally
{
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}
}

private void Form2_Load(object sender, EventArgs e)
{
da = new SqlDataAdapter("select * from table2", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Columns[0].HeaderText = "کد کالا";
dataGridView1.Columns[1].HeaderText = "نام کالا";
dataGridView1.Columns[2].HeaderText = "تعداد";
dataGridView1.Columns[3].HeaderText = "قیمت";
}
}
}

که البته ناقصه سوالم اینجاست که چطوری اطلاعات جدول اول رو مثل کد شخص رو در کامبوباکس دوم بیاریم و بعد کل اطلاعات جدول دوم رو تو دیتاگرید بریزیم

vahidth
جمعه 27 بهمن 1391, 16:30 عصر
داداش چطوری بعد از جوین کردن اطلاعات جدول یک رو تو کامبوباکس نشون بدم؟

khokhan
جمعه 27 بهمن 1391, 17:03 عصر
داداش چطوری بعد از جوین کردن اطلاعات جدول یک رو تو کامبوباکس نشون بدم؟

باسلام

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


DataTable dt2 = new DataTable();
DataSet ds = new DataSet();

SqlCommand my_cn = new SqlCommand("select * from tabel1");
comboBox1.DataSource = dt2;
comboBox1.DisplayMember = "name";

vahidth
جمعه 27 بهمن 1391, 17:23 عصر
داداش این کارایی که گفتی کردم ولی نشد
ببین داداش من میخوام برای افراد که اجناس نسیه میبرن یک کد و نام تعریف کنم در فرم اول و در فرم دوم که فرم فروش هست کد فروش و یک کامبوباکس بزارم که بره اطلاعات (کد و نام )که در فرم اول تعریف شدن رو بیاره
و بعد کل اطلاعات در دیتاگرید ذخیره بشه
مثل این نمونه

نام کدشخص کد فروش نام کالا تعداد قیمت
محسن 21547 36259 ماست 1 60000
محسن 21547 36256 شیر 1 30000
به این صورت
پروژه رو هم آپلود کردم
فقط برای تست هست

khokhan
جمعه 27 بهمن 1391, 19:56 عصر
با سلام

یه چند تا تغییرات دادم ببین بازم اگه مشکلی بود بگین

ارادت داریم

vahidth
جمعه 27 بهمن 1391, 21:18 عصر
ممنون ازت داداش گلم
داداش چطوری میتونم دو تا کامبوباکس بزارم در اولی کد شخص و در دومی نام فرد رو از دیتاگرید بخونه و تو کامبوباکس بیاره؟ البته از جدول اول
آیا میشه یه تکست گذاشت و جستجوی کرد و اطلاعات کد شخص و نام رو اورد و در کامبوباکس نشون داد
فقط یه مشکلی که دارم چطوری میتونم اطلاعات کامبوباکس رو هم در دیتاگرید ذخیره کنم؟

sendelbor
جمعه 27 بهمن 1391, 21:39 عصر
دوست عزیز میشه بگی برا چی این کارو کردی ؟
این که باید خودت از تو کمبو نگاه کنی و بصورت دستی اطلاعات وارد تکست باکس کنی. حالا اگه تعداد کسایی که نسیه میبرن به 50 نفر برسه میخوای 50 تا اسمو توی کمبو نگاه کنی تا اون فرد خاص پیدا کنی بنظرت یکم سخت نیست ؟
شاید من خوب متوجه نشدم میشه یکم توضیح بدی.

vahidth
جمعه 27 بهمن 1391, 21:41 عصر
خوب به نظرت چیکار کنم داداش
خوب بجای استفاده از کامبوباکس از چی استفاده کنم؟

khokhan
جمعه 27 بهمن 1391, 21:52 عصر
ممنون ازت داداش گلم
داداش چطوری میتونم دو تا کامبوباکس بزارم در اولی کد شخص و در دومی نام فرد رو از دیتاگرید بخونه و تو کامبوباکس بیاره؟ البته از جدول اول
آیا میشه یه تکست گذاشت و جستجوی کرد و اطلاعات کد شخص و نام رو اورد و در کامبوباکس نشون داد
فقط یه مشکلی که دارم چطوری میتونم اطلاعات کامبوباکس رو هم در دیتاگرید ذخیره کنم؟

درود بر شما

کار زیاد مشکلی نیست اگه بخوای با همون روشی که در برنامه گنجاندم هر چندتا کمبو که خواستی رو پر کنی اما باید دیتا تیبل هارو جداگانه نامگزاری کنی وبرای هر کمبو یکی رو اختصاص بدی

خواستی درستش می کنم برات

بدرود

khokhan
جمعه 27 بهمن 1391, 21:55 عصر
خوب به نظرت چیکار کنم داداش
خوب بجای استفاده از کامبوباکس از چی استفاده کنم؟
سعی کن این دوتا جدولو با یه مشخصه مشترک به هم دیگه ارتباط بدی

بعدش دیگه کار زیاد سختی نیست

vahidth
جمعه 27 بهمن 1391, 22:41 عصر
بازم ممنون ازت داداش گلم یکی از دوستان sendelbor گفت که این روش خوبی نیست ایا این روش خوبیه به نظر شما استاد
من دو تا جدول رو باهم ارتباط دادم داداش ولی نمیدونم چرا هر کاری میکنم نمیتونم وقتی کامبوباکس اول مثلا کد رو انتخاب کردم همون لحظه در کامبوباکس دوم نام شخص رو نشون بده و چطوری این اطلاعات رو تو دیتاگرید بریزم؟

khokhan
جمعه 27 بهمن 1391, 22:55 عصر
با سلام مجدد

راجع به سوال اولتون بایستی بگم که باین شیوه که شما اشاره کردین میگویند کمبوباکسهای مربوط به هم یعنی کمبو اول رو که به یه جدول وصل کردی می آی کمبو

دوم رو در رویداد SelectedIndexChanged کمبو اولی مقدار دهی می کنی یعنی با تغیر در کمبو اول مقادیر کمبو دوم فرق می کنه

اما این درمواقعی لازم است که یک مقدار از کمبو اولی دارای مقادیر بیش از یکی در کمبو دوم باشه در حالی که مال شما در کمبو دوم فقط یک مورد است پس بهتره از خیرش بگذرین
واینکه این انتخابهارو توی دیتا گرید بریزین این حرف درستی نیست چون این اطلاعات بایستی توی دیتابیس ذخیره بشه وبعد از اون در دیتا گرید هم به نمایش درمی آد

در نتیجه شما بایستی به فکر ذخیره مقدار کمبو در دیتابیس باشین

vahidth
شنبه 28 بهمن 1391, 08:55 صبح
خوب مشکل اینجاست که نمیتونم اطلاعات کامبوباکس رو در دیتاگرید بریزم

vahidth
شنبه 28 بهمن 1391, 10:18 صبح
کسی نبود کمک کنه

vahidth
شنبه 28 بهمن 1391, 13:14 عصر
از دوستان کسی نبود راهنمایی کنه؟

vahidth
شنبه 28 بهمن 1391, 18:00 عصر
استاد khokhan کجایی مشکلم حل نشد.

khokhan
شنبه 28 بهمن 1391, 18:15 عصر
سلام
کدوم مشکل؟

Amir.pc_66
شنبه 28 بهمن 1391, 18:53 عصر
دوست گرامی واسه کومبو دوم شما میتونین یه listbox استفاده کنین تا مشکل چند جوابی کومبو اول حل بشه و با تغییر ایندکس کومبو اولی اونایی که به پارامتر انتخابی کومبو اولی مربوط نمیشن حذف بشن

هربار باید لیست باکس اول تابع پر بشه

vahidth
شنبه 28 بهمن 1391, 20:52 عصر
مشکلم اینجاست که نمیتونم اطلاعات کامبوباکس رو تو دیتاگرید بریزم

khokhan
شنبه 28 بهمن 1391, 21:10 عصر
با سلام

اخوی عزیز قضیه " ریختن کمبو باکس تو دیتا گرید " اصلا چیه :متفکر:

من نمی فهمم وقتی محتوای کمبو رو توی دیتا گرید بریزی "که اصلا کارمشکلی هم نیست " با بستن برنامه که اطلاعات از بین می ره که
به نظرم بایستی بگی کمبو باکس رو به دیتا بیس بریزیم !!!! درسته ؟

بعد از دیتا بیس بخونیم ودر دیتا گرید نشون بدیم

اگه جوابت بله است همون برنامه قبلی رو ادامش رو بنویسم

vahidth
شنبه 28 بهمن 1391, 21:59 عصر
بله میخوام اطلاعات کامبوباکس رو تو دیتابیس ذخیره کنم به همراه کلیه اطلاعات فروش
برای مثال
در فرم اول یک کد و نام برای شخصی که کالای نسیه میبره وارد کردیم و تو دیتابیس ذخیره شد و این کد شخص نمیتونه تکراری باشه مثلا کد : 15236 نام : علی حسینی
و در فرم دوم دو تا کامبوباکس بزاریم و کد شخصی رو که در فرم اول در دیتابیس ذخیره کرده بودیم رو تو کامبوباکس نمایش بدیم و وقتی کد رو انتخاب کردیم نام شخص رو هم بیاره نام شخص رو هم در فرم اول تعریف کردیم و کل اطلاعات رو در دیتابیس ذخیره کنه

کد شخص : 15236 نام شخص : علی حسینی کد فروش: 32569 نام کالا : ماست تعداد : 1 قیمت : 50000 تاریخ 1390/02/01

کد شخص : 15236 نام شخص : علی حسینی کد فروش: 32566 نام کالا : شیر تعداد : 1 قیمت : 40000 تاریخ 1390/02/02

کد شخص : 15236 نام شخص : علی حسینی کد فروش: 32563 نام کالا : کره تعداد : 1 قیمت : 20000 تاریخ 1390/02/03

Amir.pc_66
شنبه 28 بهمن 1391, 22:50 عصر
خوب به نظر با دارا بودن وضعیت کاربر دائمی حتما میدونی که چه جوری در فرم اول اطلاعاتت رو ذخیره کنی
حالاجواب سوال دوم که اطلاعات کد شخص رو تو کومبو نشون بدیم. البته با توجه به اینکه نمیتونی جستجو کنی بهتره از textbox و خاصیت textchange اون استفاده کنی که کار مهندسی هم همینه
ولی واسه نشون دادن یک ستون از پایگاه داده در کومبوباکس روش کلیک کن روی فلش کوچولو سمت راست کلیک کن و روی use data bound تیک بزن و پایگاهت رو بشناسون و فیلدهای دیگه رو بزن نام ستون دلخواه

vahidth
یک شنبه 29 بهمن 1391, 22:00 عصر
آخر این مشکل من برطرف نشد

vahidth
دوشنبه 30 بهمن 1391, 09:53 صبح
کسی نمیتونه مشکل منو حل کنه

khokhan
سه شنبه 01 اسفند 1391, 01:21 صبح
کسی نمیتونه مشکل منو حل کنه
با سلام خدمت آقا وحید گل

من یه خورده روی جداولتون کار کردم ویه جدول هم بهش اضافه کردم و جمعا شد 3 تا جدول

یه خورده هم کدهاتونو تغییر دادم وهمچنین فرمها جمعا می شه گفت همون چیزی شد که شما می خواستین

امکانات فعلی برنامه : 1 امکان تعریف وحذف کالاها 2 - امکان تعریف وحذف مشتریان 3 - فراخانی اطلاعات جدول کالا ومشتری در فرم سوم

وافزودن خرید مشتریان وثبت آنها در جدول سوم

اما چون حجم برنامه زیاد بود نتونستم در اینجا قراربدم ایمیلتون هم ندارم خواستی آدرس ایمیلتو بده
می فرستم واست
یه چیزی در این حد :

vahidth
سه شنبه 01 اسفند 1391, 08:54 صبح
ممنون ازت داداش گلم