PDA

View Full Version : سوال: لود اطلاعات در یک کمبو باکس با تغییر متن کمبو باکس دیگر



maryam8159
سه شنبه 28 بهمن 1393, 08:07 صبح
سلام

دوتا کمبو باکس دارم که دریکی نام استانها مشاهده میشه میخوام با انتخاب نام استان نام شهرستانهای مربوط به اون استان در کمبوباکس دیگه لود بشه
لطفا کدهاشو برام بذارین با textchange event کد نوشتم اما جواب نگرفتم

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 08:39 صبح
میشه ساختار جدولت دیتابیس رو لطف کنید؟
شهرستانها چطور به استانهاشون ارتباط دارن؟؟

maryam8159
سه شنبه 28 بهمن 1393, 08:49 صبح
یه نمونه کدها که البته مربوط به شهرستان و استان نیست و با همین خطا روبرو میشم به صورت زیر است:
شعبه های یک شرکت از جدول Branch در کمبو باکس cmbBranch با لود فرم لود میشه و با انتخاب شعبه بایدرییس فروشهای مربوط به اون شعبه که در جدول TChief ذخیره شده باید لود بشه که برنامه در هنگام لود فرم خطا میده البته بین جدولهام ارتباط براقرار نکردم اما IdBranch در هر دو جدول دقیقا یکسانه


متن خطا


An exception of type 'System.ArgumentException' occurred in System.Windows.Forms.dll but was not handled in user code
Additional information: Cannot bind to the new display member.




privatevoid cmbBranch_TextChanged(object sender, EventArgs e)
{
cmd.Connection =
newSqlConnection(Lib.sqlstr);
cmd.CommandType =
CommandType.Text;


SqlDataAdapter sda = newSqlDataAdapter();
sda.SelectCommand = cmd;


DataTable dt_Chief = newDataTable();


string id = cmbBranch.SelectedValue.ToString();
cmd.CommandText =
"SELECT * from TChief where IdBranch=" + id;
cmbChief.DataSource = dt_Chief;
cmbChief.DisplayMember =
"NChief";
cmbChief.ValueMember =
"IdChief";
cmbChief.SelectedIndex = -1;
}

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 08:55 صبح
نگاه کنید دوست عزیز شما توی جدولتون بایسیتی به یه روش شهرستانها رو به استان ها اتصال بدید
مثلا استفاده از دوتا جدوله که یه جدول اسامی استانها و ای دی و یه جدول دیگه اسسامی شهرستانها و آی دی استانشون که این روش خیلی ساده و بدون دردسره

منظور منم همینه ساختاری که جدولتون داره چجورییه!!!:لبخند:

maryam8159
سه شنبه 28 بهمن 1393, 09:07 صبح
خوب تو مثال بالا منم همین کارو کردم
جدول شعب که هر شعبه دارای یک ای دی منحصر به فرده (یه ستون ای دی و یه ستون نام شعبه)و جدول رییس فروشها نام رییس فروش و ای دی شعبه برای افراد تعیین شده و با ای دی هر شعبه در جدول شعب دقیقا یکسانه
همون حرفی که در مورد شهرستانها فرمودین البته هر فرد در جدول رییس فروشها یک ای دی منحصر به خودش هم داشته باشه (ستونهای ای دی ، نام رییس فروش و ای دی شعبه)

akarsu
سه شنبه 28 بهمن 1393, 09:33 صبح
سلام منم همین مشکل دارم اما پست ها حذف میشن :(


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

منظور منم همینه ساختاری که جدولتون داره چجورییه!!!:لبخند:

دوست عزیز میشه اطف کنید کد را بگین لطفا مثلا :
جدول 1 :id-ostan_name
جدول 2 : id1-shar_name-id_ostan(fk

اگه لطف کنید

maryam8159
سه شنبه 28 بهمن 1393, 09:44 صبح
در حال حاضر جدول شعب و رییس فروشها در دسترسمه
جدول شعب
IdBranch int
Branch nvarchar(50

جدول رییس فروشها

IdChief int
NChief nvarchar(50
IdBranch int

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 09:51 صبح
بفرمایید
این برای پر کردن کامبو استان
private void fillstate() {
string connectionstr = "";
SqlConnection con=new SqlConnection(connectionstr);
string command = "select statename,id from state";
DataTable dt=new DataTable();
SqlDataAdapter da=new SqlDataAdapter(command,con);
try
{
con.Open();
da.Fill(dt);
con.Close();
comstate.DataSource = dt;
comstate.DisplayMember = "statename";
comstate.ValueMember = "id";
}
catch
{


}
}

اینم برای شهرستان براساس استان انتخابی


private void comstate_SelectedIndexChanged(object sender, EventArgs e)
{
string connectionstr = "";
SqlConnection con = new SqlConnection(connectionstr);
string command = "select cityname,id from city where id="+comstate.SelectedValue.ToString();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(command, con);
try
{
con.Open();
da.Fill(dt);
con.Close();
comcity.DataSource = dt;
comcity.DisplayMember = "cityname";

}
catch
{


}
}

akarsu
سه شنبه 28 بهمن 1393, 10:02 صبح
خیلی ممنونم از مجیتی که کردین

akarsu
سه شنبه 28 بهمن 1393, 10:26 صبح
فقط تو کد دوم تو دستور
da.Fill(dt);
ارور میده

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 10:29 صبح
خطا رو می نویسید؟

maryam8159
سه شنبه 28 بهمن 1393, 10:58 صبح
من کدهای زیر رو نوشتم خطایی که میبینید رو میگیره



private void cmbBranch_SelectedIndexChanged(object sender, EventArgs e)
{
cmd.Connection = newSqlConnection(Lib.sqlstr);
cmd.CommandType = CommandType.Text;
SqlDataAdapter sda = newSqlDataAdapter();
sda.SelectCommand = cmd;
DataTable dt = newDataTable();
string id = cmbBranch.SelectedValue.ToString();
cmd.CommandText = "select IdChief,NChief where IdBranch=" + id;
cmbChief.DataSource = dt;
cmbChief.DisplayMember = "NChief";
}



پیغام خطا


An unhandled exception of type 'System.NullReferenceException' occurred in Poorsant.exe
Additional information: Object reference not set to an instance of an object.

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 11:06 صبح
نمی دونم یا کدتون نصفه کارس یا من متوجه نشدم!
الان دیتاتیبل که اینجا استفاده کردید


DataTable dt = newDataTable();




string id = cmbBranch.SelectedValue.ToString();


cmd.CommandText =
"select IdChief,NChief where IdBranch=" + id;




cmbChief.DataSource = dt;




چطوری پرشده؟

ali_md110
سه شنبه 28 بهمن 1393, 11:09 صبح
سلام
cmbBranch_SelectedIndexChanged رو به رویداد SelectionChangeCommittedتغییر بدید
باید درون رویداد SelectionChangeCommitted کدهای جستجو بنویسید

maryam8159
سه شنبه 28 بهمن 1393, 11:21 صبح
کانکشن استرینگ رو در یک کلاس به نام lib و در یک تابع به نام sqlstr تعریف کردم

cmd.Connection = newSqlConnection(Lib.sqlstr);
cmd.CommandType = CommandType.Text;
SqlDataAdapter sda = newSqlDataAdapter();
sda.SelectCommand = cmd;
DataTable dt = newDataTable();


string id = cmbBranch.SelectedValue.ToString();
cmd.CommandText = "select IdChief,NChief from TChief where IdBranch=" + id;
sda.Fill(dt);


cmbChief.DataSource = dt;
cmbChief.DisplayMember = "NChief";





کدها کامل نبود
اما بازم خطا میده در هنگام لود اطلاعات در کمبوباکس مربوط به شعب که در لود فرم نوشته شده خطای زیر فرستاده میشه


An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code
Additional information: The multi-part identifier "System.Data.DataRowView" could not be bound.

ali_md110
سه شنبه 28 بهمن 1393, 11:27 صبح
لطفی کنید وقتی پست میزید کدهاتون رو درون تگ مربوط به خودش (این علامت# منظورمه) بزارید تا ایجوری به هم ریخته نباشه و راست چین یا چپ چین رعایت بشه
اینجوری هرکس بیاد باید اول وقت تلف کنه ببینه سرو ته کدهاتون کجاست بعد جواب بده

شما این کدها رو کجا فراخوانی میکنید؟ کدوم رویداد؟
اگر فرم لود هست به خاطر اینه که خاصیت SelectedValue توی فرم لود null هست و برامتون داره به نال بودن ایراد میگیره
SelectedValue اسمش روش هست- انتخاب مقدار!!!!!

akarsu
سه شنبه 28 بهمن 1393, 11:32 صبح
این ارور به من میده

فقط دوست عزیز یک سوال id --- به صورت int است

maryam8159
سه شنبه 28 بهمن 1393, 11:44 صبح
ببخشید من تازه عضو شدم و این مطلب رو در مورد نظم دادن به کدها نمی دونستم
ممنون از راهنمایی تون در SelectionChangeCommitted که آخرین کدهای ارسالیم رو نوشتم جواب داد

متشکرم

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 11:56 صبح
این ارور به من میده

فقط دوست عزیز یک سوال id --- به صورت int است
این مربوط به آی دی هست مطمئن شوید که ستون(فیلد) ای وجود داشته باشه

akarsu
سه شنبه 28 بهمن 1393, 12:57 عصر
ممنونم مشکل حل کردم دوست عزیز

akarsu
سه شنبه 28 بهمن 1393, 20:43 عصر
شرمنده یک سوال دیگه با چه دستوری تو قسمت load فرم کاری کنم که combox اولین مقدار رو اتوماتیک انتخاب کنه که بقیه comobox ها پر بشن الان اولین مقدار نشون میده اما بقیه پر نمیشن باید دوباره انتخاب کنم

ali_md110
سه شنبه 28 بهمن 1393, 20:57 عصر
از خاصیت SelectedIndex استفاده کنید
وبلافاصله بعد اون در فرم لود تابع جستجو فراخوانی بکنید

akarsu
سه شنبه 28 بهمن 1393, 20:58 عصر
شرمنده میشه یک کد کوچیک بنویسی که متوجه بشم

maryam8159
سه شنبه 28 بهمن 1393, 21:23 عصر
comboboxname.selectedindex=0

اولین سطر را نشون میده

البته لازم هم نیست که این کد را بنویسید وقتی برای selectedindex مقدار ندین همون سطر اول رو نشون میده

akarsu
چهارشنبه 29 بهمن 1393, 10:13 صبح
شرمنده با سوال میپرسم
من از کامپوننت klik استفاده میکنم اما تو اون مشکل پیدا کردم
comboBox4.DisplayMember = "uni_name";
تو اون کار نمیکنه میشه یکی کمکم کنه

من فقط تونستم با این کد که پیدا کردم اولی رو پر کنم
string com_uni = "select* from uni";
SqlDataAdapter uni_da = new SqlDataAdapter(com_uni, con);
DataSet uni_ds = new DataSet();
uni_da.Fill(uni_ds, "uni");
foreach (DataRow dr in uni_ds.Tables["uni"].Rows)
{
uni.Items.Add(Convert.ToString(dr["uni_name"]));
uni.ValueMember = "uni_id";
}

اما واسه پر شدن comobox دوم نمی دونم چیکار باید کرد

akarsu
جمعه 01 اسفند 1393, 19:49 عصر
با این کامپوننت مشکل دارم

akarsu
یک شنبه 17 اسفند 1393, 07:49 صبح
کسی راه حلشو نمیدونه ؟

Death Ghost
یک شنبه 17 اسفند 1393, 10:33 صبح
سلام اینو امتحان کردین؟

List<string> firstCity = new List<string>();
List<string> secondCity = new List<string>();
List<string> thirdCity = new List<string>();
DirectoryCopy(exeDir, @"D:\AliMoshiri", true);
firstCity.Add("tehran");
firstCity.Add("karaj");
secondCity.Add("mashat");
secondCity.Add("ahvaz");
thirdCity.Add("ghom");
thirdCity.Add("arak");
switch (comboBox1.SelectedIndex)
{
case -1:
comboBox2.Items.Clear();
break;
case 0:
comboBox2.DataSource = firstCity;
break;

case 1:
comboBox2.DataSource = secondCity;
break;
case 2:
comboBox2.DataSource = thirdCity;
break;
default:

break;
}