PDA

View Full Version : سوال: چطوری اطلاعات یک CheckedListBox را به دیتابیس ارسال کنم ؟



rayson
شنبه 26 مرداد 1392, 18:47 عصر
سلام.
من یک checkedListBox دارم که اطلاعات درونش را از دیتا بیس میگیرم و میخوام هرچندتا از اطلاعات انتخاب شد ، زمانی که دکمه ثبت زده شد در دیتا بیس ذخیره شود.
من با دستور ریر اطلاعاتی که انتخاب میکنم در یک مسیج باکس نشان میدهد.
کد را در خاصیت ItemCheck ابزار CheckedListBox نوشتم.
if (e.NewValue == CheckState.Checked) {
MessageBox.Show(mojaz_chklb_groups.SelectedItem.To String());

}

parvizwpf
شنبه 26 مرداد 1392, 19:23 عصر
خب توی همین ایف کد اینزرت بنویس.

arefba
شنبه 26 مرداد 1392, 19:29 عصر
کار سختی نیست
بدین شکل
http://social.msdn.microsoft.com/Forums/windows/en-US/da3523f6-4b48-45ba-8131-635596268bb7/how-to-insert-checked-list-box-values-and-retrieve-value-from-database

rayson
یک شنبه 27 مرداد 1392, 22:25 عصر
سلام.
کسی نیست که به من کمک کنه ؟
برنامم گیر کرده خیلی نیازه به این کد لطفا یکی کمک کنه !:((((((((((((((((((((

من اطلاعاتم را با SqlDataReader برروی CheckedListBox نمایش میدهم. زمانی که میخوام همین اطلاعات نمایش داده شده را ثبت کنم( آی دی اطلاعات میخوام ثبت کنم) بدلیل اینکه آی دی آن را ندارم نمینونم ثبت کنم .
حالا من چندین کد در سایت های مختلف دیدم که با استفاده از DataTable یا DataSet اطلاعات را نمایش میدهند و اینکار این قابلیت را میده که Member , Value مشخص کنند ، حال من وقتی دستورات Checkedlistbox.datasource=dt میخوام وارد کنم اصلا خاصیت Datasoure ندارد که dt را بهش نسبت بدم . چندین وقت است که گیر این موضوع هستم 2 تاپیک هم زدم ولی هیچکس کمکی نکرده . لطفا راهنمایی کنید.
کد نمایش من هم کد زیر است . کد آی دی داده را مشخص نمیکند برای همین باید تغییر توش صورت گیرد که مشکل بالا ایجاد میشود.

private void info_chklb_group() {
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\data computer.org\Documents\Visual Studio 2010\Projects\SNM\SNM\sm.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

SqlCommand com = new SqlCommand("select group_name,id_group from groups ");
con.Open();
com.Connection = con;
SqlDataReader reader = com.ExecuteReader();

while (reader.Read())
{

checkedListBox1.Items.Add(reader["group_name"].ToString());

}

reader.Close();

con.Close();

}

Mahmoud.Afrad
یک شنبه 27 مرداد 1392, 23:10 عصر
یک کلاس بنویس که بتونی اطلاعاتی که از دیتابیس میاد رو باهاش نگه داری. البته متد tostring رو بازنویسی کن تا فقط name رو در چک لیست باکس نشون بده.

class Group
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Convert.ToString(Name);
}
}

private void info_chklb_group()
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\data computer.org\Documents\Visual Studio 2010\Projects\SNM\SNM\sm.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

SqlCommand com = new SqlCommand("select group_name,id_group from groups " , con);
con.Open();
SqlDataReader reader = com.ExecuteReader();
while (reader.Read())
{
Group g = new Group()
{
Id = Convert.ToInt32(reader["id_group"]),
Name = Convert.ToString(reader["group_name"])
};
checkedListBox1.Items.Add(g);
}
reader.Close();
con.Close();
}

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

foreach (var item in checkedListBox1.CheckedItems)
{
Group g = item as Group;
// you can read g.Id
}

اونجایی که کامنت you can read g.Id رو گذاشتم میتونی آیدی رو از g بدست بیاری و اینزرت کنی.
این حلقه رو در باتنی که ثبت انجام میشه مینویسی نه در رویدادهای جک لیست باکس.

rayson
دوشنبه 28 مرداد 1392, 00:50 صبح
سلام .
آقای افراد خیلی ممنون آقا دمت گرم بابا چند روز بود خواب بد میدیدم :( دست درد نکنه داداش.
کد با خوبی و خوشی اوکی برای یک گزینه اما فقط یک مشکل وجود دارد من زمانی دو یا 3 گزینه را انتخاب میکنم برنامه خطا میگیره از آی دی .
ضمیمه :

http://uploadtak.ir/images/39nviwp5g0mwh62sbpur.jpg

Mahmoud.Afrad
دوشنبه 28 مرداد 1392, 01:31 صبح
در مرتبه دوم تکرار حلقه نام پارامتر تکراری میشه.
کد این قسمت رو کامل بزار تا تغییر بدم. (عکس نباشه)

rayson
دوشنبه 28 مرداد 1392, 02:01 صبح
طبق گفته هاتون ، یک کد نوشتم البته تا جایی که مغزم کشید اما جواب نمیده کد:
SqlCommand com1 = new SqlCommand("insert into group_for_employe (id_group,code_ozviat) values (@id_group,@code_ozviat)");

foreach (var item in mojaz_chklb_groups.CheckedItems)
{


myGroup g = item as myGroup;

for (int j = 0; j <= g.Id; j++)
{


com1.Parameters.AddWithValue("@id_group",j );
com1.Parameters.AddWithValue("@code_ozviat", info_txt_code_ozviat.Text);
con.Open();
com1.Connection = con;
com1.ExecuteNonQuery();
con.Close();
}
}
آقا شرط حلقه کلا اشتباه است :(( خواستیم تلاش کنیم :(

rayson
دوشنبه 28 مرداد 1392, 02:26 صبح
کد به :
SqlCommand com1 = new SqlCommand("insert into group_for_employe (id_group,code_ozviat) values (@id_group,@code_ozviat)");

foreach (var item in mojaz_chklb_groups.CheckedItems)
{


myGroup g = item as myGroup;


com1.Parameters.Clear();

com1.Parameters.AddWithValue("@id_group",g.Id );
com1.Parameters.AddWithValue("@code_ozviat", info_txt_code_ozviat.Text);
con.Open();
com1.Connection = con;
com1.ExecuteNonQuery();
con.Close();

}

تغییر دادم اوکی شد .خیلی خیلی ممنون از شما بابت راهنمایی :)

rayson
دوشنبه 28 مرداد 1392, 02:41 صبح
ببخشید یک سوال امکانش هست به من بگید دقیقا کار این کلاس چیست ؟

class myGroup
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Convert.ToString(Name);
}
}
با تشکر.

Mahmoud.Afrad
دوشنبه 28 مرداد 1392, 02:49 صبح
کدی که با For نوشتی اشتباست.

کد Foreach درسته منتها به ازای هر بار اجرای حلقه یکبار کانکشن باز ، اجرای دستور و کانکشن بسته میشه که سرعت پایینی داره. میتونی داخل حلقه همه دستورات رو یکی کنی و بعد خارج از حلقه یکباره درج کنی.

SqlCommand com1 = new SqlCommand();
com1.Connection = con;
com1.Parameters.AddWithValue("@code_ozviat", info_txt_code_ozviat.Text);
foreach (var item in mojaz_chklb_groups.CheckedItems)
{
myGroup g = item as myGroup;
string idGroupParam = "@id_group" + g.Id;
com1.CommandText += "insert into group_for_employe (id_group,code_ozviat) values ("+ idGroupParam + " ,@code_ozviat);";
com1.Parameters.AddWithValue(idGroupParam, g.Id);
}
con.Open();
com1.ExecuteNonQuery();
con.Close();

hamid_0341
دوشنبه 28 مرداد 1392, 07:18 صبح
الان توی برنامم استفاده کردم با linq ایتقدر کار داره :لبخند:
Linq.DataClasses1DataContext db = new Linq.DataClasses1DataContext();
var quer = from qry in db.Pos_tbls
select qry;
foreach (var item in quer)
{
checkedListBox1.Items.Add(item.Bankname.ToString() );
}

Mahmoud.Afrad
دوشنبه 28 مرداد 1392, 10:32 صبح
الان توی برنامم استفاده کردم با linq ایتقدر کار داره :لبخند:
Linq.DataClasses1DataContext db = new Linq.DataClasses1DataContext();
var quer = from qry in db.Pos_tbls
select qry;
foreach (var item in quer)
{
checkedListBox1.Items.Add(item.Bankname.ToString() );
}
سوال ارسال به دیتابیس هست. حالا اگر قرار باشه آیدی اونهایی که چک خورده رو ثبت کنید چه کار میکنید؟ (جستجوی مجدد هم جواب نمیده)