PDA

View Full Version : مشکل در کمبو باکس



donya100
دوشنبه 10 خرداد 1389, 10:52 صبح
سلام
من دارم از کنترل BindingNavigator استفاده می کنم . چون اطلاعات پایگاه داده ام بر روی سرور هست برای پر کردن bindingsource از کد استفاده کردم و تمامی text box ها و کمبو هام را به دیتا سورس ارتباط دادم . حالا مشکلم اینه که در پایگاه داده جنسیت از نوع bit تعریف شده . حالا وقتی این فیلد را به text کمبو ارتباط می دم true یا false نمایش می دهد .( حتی اگر برای تکست کمبو شرط بگذارم ) کمبو خاصیت value هم نداره که از اون استفاده کنم . اگر از selectedvalue هم استفاده کنم خطا میده و لحظه لود null برمی گرداند .
کسی می تونه راهنمایی کنه ؟

behnam25214
دوشنبه 10 خرداد 1389, 11:54 صبح
من که نفهمیدم میخوایی چی کار کنی ؟ میخوایی تو کمبو باکست چی رو نشون بدی؟

NIK
دوشنبه 10 خرداد 1389, 14:09 عصر
بهتر است داده های مورد نظر خود را به صورت یک Query از سرور گرفته و در یک datatable بریزید. سپس با استفاده از یک حلقه داده های هر سطر از Datatable رو اون جوری که می خواهید تغییر بدید. اونوقت Datatable رو داخل یک گریدویو بریزید.

donya100
دوشنبه 10 خرداد 1389, 14:11 عصر
کمبو به یک فیلد از جدول DB متصله که نوع فیلد، بیت هست . اما من می خوام د رکمبو زن یا مرد نشون بده نه true و false !

NIK
دوشنبه 10 خرداد 1389, 14:49 عصر
متاسفم
الان باید برم . ولی قول می دم فردا یه راهکار بهتون ارائه کنم. البته شاید خیلی استاندارد نباشه ولی مشکلتون رو به طور کامل برطرف میکنه.

sds1920
دوشنبه 10 خرداد 1389, 15:56 عصر
دوتا راه داري.يا استفاده از Query ديتابيس يا اينكه خودت دستي تغيير بدي.يعني اينكه با يه حلقه for مقادير رو تغيير بدي.من همين راه رو توصيه مي كنم تا اينكه از Query استفاده كني.جون اگه از ًعقثغ استفاده كني حجم داده ايي كه مي خواد منتقل بشه زياد مي شه و زمان بيشتري طول مي كشه.

براي اينكه دستي تغيير بدي اول يك ستون از نوع string به ديتاست اضافه كن :


Dset.Tables["TablName"].Columns.Add("ColumnName1",typeof(string));


حالا با يك حلقه for يا forach كارش رو تموم كن :


foreach(DataRow DR in Dset.Tables["TableName"].Rows)
DR["ColumnName1"]=((bool)DR["BitColumnName"]==false?"مرد":"زن");


BitColumnName اسم فيلدي كه از نوع بيت هست.
موفق باشي.

donya100
دوشنبه 10 خرداد 1389, 17:41 عصر
rbtnFemail.DataBindings.Add("Checked", ds.Tables[0],"Sex");


مشکل این کد چیه که جواب نمی ده ؟ به نظرم چون مقدار در DB ولین بوده اینجا عمل نمی کنه.
این کدی که دوستمون نوشتند خوبه اما من اطلاعات پایگاه داده ام خیلی زیاده با اون روش به مشکل سرعت بر می خورم

sds1920
دوشنبه 10 خرداد 1389, 18:13 عصر
دوست عزيز بهتر خودتم يه كم فكر كني.شما چطور مي توني يك مقدار از نوع بيت رو به يك مقدار string تبديل كني بدون هيچ پردازشي؟

donya100
سه شنبه 11 خرداد 1389, 08:29 صبح
مقدار checked در radio button از نوع بولین هست نه string!!!

donya100
سه شنبه 11 خرداد 1389, 08:39 صبح
ببخشید .فراموش کردم بگم کنترل رو عوض کردم گفتم شاید با radiobutton بتونم به جواب برسم .

donya100
سه شنبه 11 خرداد 1389, 11:08 صبح
یعنی هیچ وقت کسی نخواسته یک ستون با نوع بولین را به یک کنترل bind کنه ؟؟؟؟

M.YasPro
سه شنبه 11 خرداد 1389, 11:42 صبح
مگه بايند نميشه ؟
بدون كدي كه دوستومن نوشتند امتحان كنيد ( اون كد براي اين بود كه به table تون توي dataset يه ستون ديگه اضافه مي كرد و هر row رو چك ميكرد اگر true بود مقدار اون فيلد رو "مرد" ميداد و ... ) ولي شما با يه حركت بدون توپ كمبو رو تبديل به checkBox كرديد .
به هر حال اگه شما يه مقدار بولين رو به checkBox بايند كنيد جواب ميده .
موفق باشيد .

donya100
سه شنبه 11 خرداد 1389, 12:17 عصر
rbtnFemail.DataBindings.Add("Checked",ds.Tables[0],"Sex");
rbtnMail.DataBindings.Add("Checked",ds.Tables[0],"Sex");

جواب نمی ده . هیچ کدوم از radiobutton ها تیک نمی خوره!!

M.YasPro
سه شنبه 11 خرداد 1389, 12:32 عصر
من فكر كردم چك باكس رو ميگيد .
بيا يه متد بنويسيم كه بعد از بايند كردن همه كنترل ها اين راديو يا كمبو يا هر چي ديگه رو كه مي خوايد بايند كنه .
من vs در دسترسم نيست


private void bind ()
{
if(bool.parse(ds.Tables[0].row[0].column[5]))
radioMale.Checked=true;
else
radioFemale.Checked;}


يا


private void bind ()
{
combo.items.add("male");
combo.items.add("female");
if(bool.parse(ds.Tables[0].row[0].column[5]))
combo.Text="male";
else
combo.Text="female";
}


اين كد رو بعد از تمام بايند كردنات بنويس.

donya100
سه شنبه 11 خرداد 1389, 12:41 عصر
من دارم radio button را بایند می کنم . شما در کدت سطر و ستون مشخصی را وارد کردی . من نمی تونم سطر مشخصی را براش در نظر بگیرم . چون از navigator استفاده می کنم و کاربر امکان حرکت روی رکوردهارو داره !!

donya100
سه شنبه 11 خرداد 1389, 12:46 عصر
تازه اون مدل cast کردن برای تبدیل به بولین هم درست نیست . جواب نمی ده .

M.YasPro
سه شنبه 11 خرداد 1389, 12:47 عصر
الان به vs دسترسي ندارم و به حرف شما هم شك دارم (من نمی تونم سطر مشخصی را براش در نظر بگیرم)
ولي تا 2 ساعت ديگه مي تونم جواب بدم .

donya100
سه شنبه 11 خرداد 1389, 12:51 عصر
بعد از کلی تلاش بالاخره مشکلم حل شد. کد رو می گذارم که اگه یه زمانی یکی دیگه هم به این مشکل بر خورد بتونه استفاده کنه .


object o=true;
if (bool.Equals(ds.Tables[0].Rows[1]["Sex"],o))
rbtnFemail.Checked = true;
else
rbtnMail.Checked = true;

sds1920
سه شنبه 11 خرداد 1389, 15:20 عصر
پس از Query استفاده كن.