PDA

View Full Version : مشکل در ثبت آیتم های checkedListBox در بانک



raminsalemi
شنبه 08 خرداد 1389, 10:15 صبح
سلام دوستان من یک کنترل checkedListBox دارم که از طریق کد نویسی به یک فیلد در بانک متصله و کاربر قادره آیتم های مورد نظرش رو انتخاب کنه ولی وقتی با این کد می خوام آیتم های انتخاب شده رو در دیتا بیس ذخیره کنم این متن ذخیره میشه System.Data.DataRowView-System.Data.DataRowView- لطفا من رو راهنمایی کنید کارم گیره!

کد مورد استفاده رو ضمیمه میکنم.باتشکر




for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
Temp += checkedListBox1.CheckedItems[i] + "-";
}

SqlConnection con = new SqlConnection(constr);
con.Open();

DataTable dt = new DataTable();
dad.Fill(dt);

string insstr = "insert into Table1(membergroup)" +
"Values (N'" + Temp + "')";
SqlCommand cmd = new SqlCommand(insstr, con);
cmd.ExecuteNonQuery();
con.Close();

mehdi.mousavi
شنبه 08 خرداد 1389, 10:46 صبح
سلام دوستان من یک کنترل checkedListBox دارم که از طریق کد نویسی به یک فیلد در بانک متصله و کاربر قادره آیتم های مورد نظرش رو انتخاب کنه ولی وقتی با این کد می خوام آیتم های انتخاب شده رو در دیتا بیس ذخیره کنم این متن ذخیره میشه System.Data.DataRowView-System.Data.DataRowView- لطفا من رو راهنمایی کنید کارم گیره!

کد مورد استفاده رو ضمیمه میکنم.باتشکر






for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
Temp += checkedListBox1.CheckedItems[i] + "-";
}

SqlConnection con = new SqlConnection(constr);
con.Open();

DataTable dt = new DataTable();
dad.Fill(dt);

string insstr = "insert into Table1(membergroup)" +
"Values (N'" + Temp + "')";
SqlCommand cmd = new SqlCommand(insstr, con);
cmd.ExecuteNonQuery();
con.Close();





سلام.
CheckedItems[i] در کد فوق یه object برمیگردونه، و از اونجایی که Temp بصورت string تعریف شده، متود ToString روی اون object فراخوانی میشه و System.Data.DataRowView برگردونده میشه. اون کد رو تغییر بدید، مشکل رفع میشه.

موفق باشید.

پاورقی: استفاده از Dynamic SQL ها هرگز توصیه نمیشه. روش بهتر اینه که برای SqlCommand خودتون، Parameter هایی در نظر بگیرید و اونها رو با مقادیر مورد نظر پر کرده، سپس اجرا کنید.

raminsalemi
شنبه 08 خرداد 1389, 12:41 عصر
دوست عزیز در صورت امکان کد پیشنهادی خودتون رو برام بزارید خیلی اظطراریه

mehdi.mousavi
شنبه 08 خرداد 1389, 12:58 عصر
دوست عزیز در صورت امکان کد پیشنهادی خودتون رو برام بزارید خیلی اظطراریه

سلام.
من کدی رو که شما از طریق اون این CheckedListBox رو پر کرده اید، ندیده ام. بر اساس توضیحاتی که داده اید، میتونید به این شکل عمل کنید:

foreach(DataRowView drv in checkedListBox1.CheckedItems)
{
string itemName = drv["WhateverFieldName"] as string;
//whatever...
}


دقت کنید که اسم Field رو باید جای WhateverFieldName قرار بدید.

موفق باشید.

پاورقی: اگر با اینکار مشکل حل نشد، لطفا کدی رو که توسط اون CheckedListBox رو پر میکنید اینجا قرار بدید تا بتونم مساله رو حل کنم.

raminsalemi
شنبه 08 خرداد 1389, 13:14 عصر
SqlConnection con = new SqlConnection(constr);
SqlDataAdapter dad = new SqlDataAdapter("SELECT member FROM dbo.Table4 WHERE (codew = '" + comboBox1.SelectedValue + "' )GROUP BY member ", con);
DataTable dt = new DataTable();
dad.Fill(dt);

checkedListBox1.DataSource = dt;
checkedListBox1.DisplayMember = "member";

mehdi.mousavi
شنبه 08 خرداد 1389, 13:26 عصر
SqlConnection con = newSqlConnection(constr);
SqlDataAdapter dad = newSqlDataAdapter("SELECT member FROM dbo.Table4 WHERE (codew = '" + comboBox1.SelectedValue + "' )GROUP BY member ", con);
DataTable dt = newDataTable();
dad.Fill(dt);

checkedListBox1.DataSource = dt;
checkedListBox1.DisplayMember = "member";



سلام.


foreach (DataRowView drv in this.checkedListBox1.Items)
{
string fieldName = drv["member"] as string;
}


موفق باشید.

raminsalemi
شنبه 08 خرداد 1389, 13:59 عصر
دوست عزیز متاسفانه این کد عمل نمیکنه من به این صورت از ش استفاده کردم لطفاً اگر ایرادی داره اصلاحش کنید ممنونم


;(
SqlConnection con = newSqlConnection(constr);
SqlDataAdapter dad = newSqlDataAdapter("SELECT member FROM dbo.Table4 WHERE (codew = '" + comboBox1.SelectedValue + "' )GROUP BY member ", con);
DataTable dt = newDataTable();
dad.Fill(dt);
foreach (DataRowView drv inthis.checkedListBox1.Items)
{
string fieldName = drv["member"] as string;
}
}

mehdi.mousavi
شنبه 08 خرداد 1389, 14:20 عصر
دوست عزیز متاسفانه این کد عمل نمیکنه من به این صورت از ش استفاده کردم لطفاً اگر ایرادی داره اصلاحش کنید ممنونم


;(
SqlConnection con = newSqlConnection(constr);
SqlDataAdapter dad = newSqlDataAdapter("SELECT member FROM dbo.Table4 WHERE (codew = '" + comboBox1.SelectedValue + "' )GROUP BY member ", con);
DataTable dt = newDataTable();
dad.Fill(dt);
foreach (DataRowView drv inthis.checkedListBox1.Items)
{
string fieldName = drv["member"] asstring;
}
}



سلام.
متوجه نمیشم چه تفاوتی بین این حقله، و اونی که من نوشتم هستش... هر دو یکی هستن و مشکلی هم نداره.

موفق باشید.

raminsalemi
شنبه 08 خرداد 1389, 14:26 عصر
مشکل اینه که
checkedListBox
آیتم نمیگیره و عملاً هیچ اتفاقی نمیفته به نظر شما ایراد کار چیه

mehdi.mousavi
شنبه 08 خرداد 1389, 14:34 عصر
مشکل اینه کهcheckedListBox آیتم نمیگیره و عملاً هیچ اتفاقی نمیفته به نظر شما ایراد کار چیه

آقا الان مشکل چیه؟ من دیگه خودم یه پروژه ایجاد کردم، و کدهایی که شما گفته بودید رو برای پر کردن لیست مزبور زدم و لیست به درستی پر شد. در مرحله بعدی هم اون حلقه رو برای شما نوشتم، تا شما بتونید لیست آیتمهای انتخاب شده رو توی یک string بریزید و با همون کد قبلی در بانک ذخیره کنید.

حالا الان مشکل چیه؟ ایرادی وجود داره؟ لطفا اینقدر خلاصه نویسی نکنید، یک بار واضح در دو سه پاراگراف توضیح بدید هدفتون چیه، کار رو چطور انجام میدید، و به چه مشکلی برمیخورید تا بشه یکبار پرونده این تاپیک رو بست.

موفق باشید.

raminsalemi
شنبه 08 خرداد 1389, 14:56 عصر
دوست عزیز با تشکر از حوصله ای که برای این مشکل صرف کردید من در برنامم یک کنترل
comboBox دارم که به فیلد کد در بانک متصله و یک کنترل
comboBox دیگه که به نام کمیته ها متصله ویک کنترل
checkedListBox که اعضای کمیته ها رو نشون میده با انتخاب کد کمیته نام کمیته درcomboBox دوم و نام اعضا در checkedListBox نمایش داده میشه که کاربر اعضایی رو که می خواد میتونه تیک بزنه ولی با کدی که شما لطف کردید checkedListBox پر نمیشه ممنون از راهنمایی های خوبتون

mehdi.mousavi
شنبه 08 خرداد 1389, 15:13 عصر
دوست عزیز با تشکر از حوصله ای که برای این مشکل صرف کردید من در برنامم یک کنترل comboBox دارم که به فیلد کد در بانک متصله و یک کنترل
comboBox دیگه که به نام کمیته ها متصله ویک کنترل checkedListBox که اعضای کمیته ها رو نشون میده با انتخاب کد کمیته نام کمیته درcomboBox دوم و نام اعضا در checkedListBox نمایش داده میشه که کاربر اعضایی رو که می خواد میتونه تیک بزنه ولی با کدی که شما لطف کردید checkedListBox پر نمیشه ممنون از راهنمایی های خوبتون

بسیار خوب. متوجه شدم.... سوء تفاهم شد. من برای پر کردن CheckedListBox شما کدی ننوشتم. شما باید از همون کدی که خودتون نوشته بودید استفاده کنید، یعنی:


SqlConnection con = new SqlConnection(constr);
SqlDataAdapter dad = new SqlDataAdapter("SELECT member FROM dbo.Table4 WHERE (codew = '" + comboBox1.SelectedValue + "' )GROUP BY member ", con);
DataTable dt = new DataTable();
dad.Fill(dt);

checkedListBox1.DataSource = dt;
checkedListBox1.DisplayMember = "member";


من در مورد پر کردن CheckedListBox صحبتی نکردم، فقط عرض کردم از Dynamic SQL ها استفاده نکنید. برای این بخش از صحبتم هم کدی ننوشتم...

در نهایت اون Loop رو به شما دادم، یعنی:


foreach (DataRowView drv in this.checkedListBox1.Items)
{
string fieldName = drv["member"] as string;
}


که شما بتونید توی این حلقه، متغیر temp خودتون رو با fieldName پر کنید و اونو با کد مورد نظر خودتون در بانک اضافه کنید. بدین ترتیب، دیگه این نام member ها هستش که در بانک ذخیره خواهد شد و نه رشته System.Data.DataRowView... (در واقع به سوال اصلی تاپیک پاسخ دادم، و نه چگونگی استفاده از Parametric Command ها و ...)

آیا با این توضیحات، بازهم مشکلی وجود داره؟ اگر اینطوره، بفرمایید تا مساله رو حل کنم.

موفق باشید.