PDA

View Full Version : سوال: تنظیم مقدار index در combobox



sajjad_spook
پنج شنبه 22 خرداد 1393, 20:53 عصر
سلام دوستان من به یه مشکل برخوردم من یه جدول تو دیتا بیس دارم که دو تا ستون داره ID و Name مثل شکل زیر




Name

ID



ali

1



reza

3





مقدار آیتم های combobox رو با مقادیر ستون Name پر میکنم ولی نمیتونم مقدار index ها رو تو combobox برابر ستون ID قرار بدم یعنی مثلا آیتم انتخاب شده علی در combobox ایندکسشم برابرID یعنی 1 باشه و خودکا از صفر شروع نشه
میخوام وقتی رو یه رکورد تو دیتا گرید کلیک کنم مقدار Selectedindex کامبو باکس برابر ستون ID دیتا گرید بشه اما چون ایندکس های کامبو باکس خودکار پر میشه خطا میده. راهنماییم کنید

datatable dt;
int arr[]=new int [dt.rows.count];
for (int i=0; i < dt.rows.count ;i++)
{
combobox.items.add(dt.rows[0]["name"]);
}

khokhan
پنج شنبه 22 خرداد 1393, 21:39 عصر
مقدار آیتم های combobox رو با مقادیر ستون Name پر میکنم ولی نمیتونم مقدار index ها رو تو combobox برابر ستون ID قرار بدم یعنی مثلا آیتم انتخاب شده علی در combobox ایندکسشم برابرID یعنی 1 باشه و خودکا از صفر شروع نشه
میخوام وقتی رو یه رکورد تو دیتا گرید کلیک کنم مقدار Selectedindex کامبو باکس برابر ستون ID دیتا گرید بشه اما چون ایندکس های کامبو باکس خودکار پر میشه خطا میده. راهنماییم کنید

موقع پر کردن کمبو باکس به صورت پیش فرض یه ردیف خالی به اولش اضافه کن تا اندیس اولین رکورد جدولت از 1 شروع بشه :


private void BindCombo()

{

DataTable dataTable = GetDataTable();

DataRow row = dataTable.NewRow();

row["Code"] = "None";

row["Name"] = "None";

dataTable.Rows.InsertAt(row, 0);

comboBox1.DisplayMember = "Name";

comboBox1.ValueMember = "Code";



comboBox1.DataSource = dataTable;





}

Hadoop
جمعه 23 خرداد 1393, 08:22 صبح
یعنی چه ؟

یعنی ممکنه سه تا رکود کلا داشته باشی ... آیدی علی : یک .. آیدی رضا : سه و آیدی بهرام : دو هزار ؟

بعد تو دیتاگرید روی بهرام کلیک کردی توی کامبوباکس بره روی آیتم دو هزار ؟ :متفکر:

فارغ از اون در کل بهتره یک کلاس Person داشته باشی که اسم و آیدی رو نگه داره و برای کامبوباکس آبجکتهای اون کلاس رو اد کنی ... اینطور راحتتر میشه مپ کرد

mehrdad.ghorbaniyan
جمعه 23 خرداد 1393, 14:57 عصر
سلام.به نظر من شما اشتباه میکنی.باید بصورت زیر استفاده کنی اونوقت میتونی از آی دی اون نام انتخاب شده استفاده کنی.برای پر کردن کموباکس از کد زیر استفاده کن :

cmbtitle.DisplayMember = "title";
cmbtitle.ValueMember = "id";
cmbtitle.DataSource=sql.fill(str);

sajjad_spook
یک شنبه 25 خرداد 1393, 18:52 عصر
دوشت عزیز شما اصلا متوجه نشدی من مثال زدم.نگفتم سه تا رکورد . کامبو باکس یه خاصیت داره به نام ایندکس که از صفر شروع میشه من میخواستم به جای صفر از آیدی های جدول شروع بشه . اینا رو که خودمم بلدم.

sajjad_spook
یک شنبه 25 خرداد 1393, 18:52 عصر
دوشت عزیز شما اصلا متوجه نشدی من مثال زدم.نگفتم سه تا رکورد . کامبو باکس یه خاصیت داره به نام ایندکس که از صفر شروع میشه من میخواستم به جای صفر از آیدی های جدول شروع بشه . اینا رو که خودمم بلدم. :لبخند::تشویق::تشویق:

sepehr1014
یک شنبه 25 خرداد 1393, 21:45 عصر
دوشت عزیز شما اصلا متوجه نشدی من مثال زدم.نگفتم سه تا رکورد . کامبو باکس یه خاصیت داره به نام ایندکس که از صفر شروع میشه من میخواستم به جای صفر از آیدی های جدول شروع بشه . اینا رو که خودمم بلدم. :لبخند::تشویق::تشویق:

ComboBox طوری طراحی شده که از ایندکس 0 شروع بشه. عوض کردن این رفتار کار درستی نیست. در طراحی نرم افزارتون تجدید نظر کنید!

Hadoop
یک شنبه 25 خرداد 1393, 22:54 عصر
مام داریم سعی میکنیم متوجهت کنیم که طراحیت و روش حل مساله ات هرچی هست غلطه . :لبخند:

بالفرض هم که حق با شما باشه میتونی یک تابع Mapper بنویسی حداکثر چهار پنج خط کد که ایندکس جدول رو با منطقی که میخوای به ایندکس کامبوباکس برات مپ کنه

ولی اگه مشکل فقط اینه که کامبو از صفر شروع میشه و جدول از یک ... مشکل با یه ++ حله :لبخند:

Hadoop
یک شنبه 25 خرداد 1393, 22:57 عصر
اوه اوکی فهمیدم این چی میخواد :لبخند:

۱- یک لیست یا آرایه int درست کن از کل آیدی هایی که توی جدولت داری.

۲ - وقتی میخوای اون رو در کامبوباکس پیدا کنی یک سرچ بزن روی آرایه یا لیست تا ایندکس موقعیت اون آیدی در لیست رو بهت بده.

۳- عددی که از قسمت ۲ به دست میاد میشه ایندکسی که برای کامبو باکس لازم داری.


در واقع این شد همون تابع Mapper که گفتم دیگه

sajjad_spook
دوشنبه 26 خرداد 1393, 10:05 صبح
تشکر دوستان خودم جوابو پیدا کردم . خاصیت SelectionStart کامبو باکس مقدار اینکدس هاشو برابر با آیدی قرار میده مثل یه آرایه عمل میکنه.راستی اگه قرار باشه این کار درست نباشه . هیچوقت همچین خاصیتی رو تو ویژوال استودیو قرار نمیدادن وقرار نیست همه به یک شکل کد بنویسن.:تشویق:

datatable dt;
int arr[]=new int [dt.rows.count];
for (int i=0; i < dt.rows.count ;i++)
{
combobox.items.add(dt.rows[0]["name"]);
combobox.selectionStart=dt.rows[0][0]

}