PDA

View Full Version : سوال: کدینگ checkbox



ahangari365
شنبه 06 اردیبهشت 1393, 11:36 صبح
کسی میدونه چطور میشه یکسری چک باکس رو به یک فیلد در بانک sql serverبصورت کد 0و1 ذخیره و بعد هم بازیابی شون کرد.
مثلا چک باکس کارمند-چک باکس کارگر-چکس باکس خانه دار و... می خوام به ترتیب این چک باکس ها تیک دار بودن یا نبودن اونها رو با 0 و 1 مشخص کنم بعد موقع update رکورها اونها رو بازیابی کنم یعنی بعد از ذخیره اگه خواستم updateکنم چک باکس ها طبق ذخیره شدنشون همون تیک ها رو داشته باشن تا دوباره بشه این تیک ها رو برداشت یا گذاشت.
اینکار من باعث میشه چک باکس ها توی یه فیلد جدول کد گذاری بشن تا اگه خواستم گزارش بگیرم این کد ها رو طبق ترتیب شون بازیابی کنم. اونایی که کد1 دارن رو تو گزارش بیارم.
اگه کسی میدون لطفاً کمک کنه.تشکر

mehrdad.ghorbaniyan
شنبه 06 اردیبهشت 1393, 12:21 عصر
سلام.نوع فیلد توی دیتابیس رو از نوع bit بگیر.
برای ذخیره کردن باید بجای true عدد 1 را ذخیره کنی و بجای false عدد 0.برای این کار یه متغیر عددی بگیر.توی چک باکس این کدو بزن :

if (chk_catalog.Checked == true)
sendcatalog = 1;
else
sendcatalog = 0;


بعد وقتی خواستیذخیره کنی sendcatalog رو ذخیره کن
برای لود کردن اطلاعات هم از sqldatareader استفاده کن.بصورت زیر :



public SqlDataReader fill_info(string sql)
{
Connect();
cmd.CommandText = sql;
SqlDataReader dr = cmd.ExecuteReader();
//disConnect();
return dr;

}
SqlDataReader dr = sql.fill_info(" SELECT send_catalog from moshtari where id=22")
if (dr.Read())
{
chk_catalog.Checked = dr.GetBoolean(0);
}


موفق باشی دوست عزیز

ahangari365
شنبه 06 اردیبهشت 1393, 13:39 عصر
تشکر از کمکت، فقط یه چیزی، من توی برنامم 8 تا چک باکس دارم می خوام هر 8تا شوناینطوری 10111001 توی یه فیلد ذخیره بشن و موقع بازیابی هم به ترتیب از چپ به راست بازیابی بشنوموقع بازیابی تک تک اعداد رو چک کنه که هر عدد مربوط به کدام چک باکس هست.برای مثال 1 از چپ (یعنی کارمند) معلوم بشه که بتونم یکسری دستورات طبق این بازیابی بتونم اعمال کنم.آیا این کدی که نوشتی همین کار رو میکنه یا نه؟

mehrdad.ghorbaniyan
شنبه 06 اردیبهشت 1393, 13:55 عصر
به نظر من این کار اشتباه.باید هر کدومو تو فیلد برا خودش ذخیره کنی.اگه اونجوری که تو میگی خواستی بشه دیگه از نوع bit نباید باشه.از نوع nvarchar بگیر.بعد بیا با sub string یکی یک بخون بعد مقایسه کن اگه true بود چک باکس رو true بذاره و برعکس

ahangari365
شنبه 06 اردیبهشت 1393, 14:08 عصر
این راه حل بهتره، میتونی یه مثال با sub string برام بزنی؟

mehrdad.ghorbaniyan
شنبه 06 اردیبهشت 1393, 14:21 عصر
این کار ب نظر من اشتباه ولی میگم :

SqlDataReader dr = sql.fill_info(" SELECT send_catalog from moshtari where id=22")

if (dr.Read())
{


string s = dr.GetString(0);




string[] a=new string[8];
for (int i = 0; i < 8; i++)
{
if (s.Substring(i, 1) == "1")
a[i] = "true";
else
a[i] = "false";

}

chkdemo.Checked = Convert.ToBoolean(a[0]);
chk_belghove.Checked = Convert.ToBoolean(a[1]);
.
.
.