PDA

View Full Version : کمک در اتصال Checkboxlist به دیتا بیس



yousef.scof
شنبه 20 دی 1393, 20:22 عصر
سلام
من برای پیدا کردن این مورد خیلی سرچ کردم کلی هم ویدئو از -یو--Tube- دیدم اما همشون فقط نمایش یک متن متصل کردن آن به Checklist بوده
من یک فیلد با مقدار Bit دارم True یا False یا همون 1،0 و میخوام این محتویات به یک Checklist متصل بشن که خب 1 یعنی تیک خورده و 0 تیک نخورده و مشکل اصلی هم آپدیت کردن اون فیلد هست که وقتی اون Checklist از طرف کاربر تیک میخوره داخل Database هم تیک بخوره و Save بشه با استفاده از C# asp.net
ممنون میشم کمک کنید...

keiv@n
دوشنبه 22 دی 1393, 12:47 عصر
سلام

اینجارو ببین : www.k1ec.ir

نمیدونم مشکلت حل شده یا نه !

ولی اگر هنوز مشکلت پا برجاست از این روش استفاده کن :

اول یک کلاس dbhelper.cs بساز :


public class DBhelper
{

public static void update(string id,bool check)
{
try
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["mydbConnectionString"].ConnectionString))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "update cTable set c_Checked = @check where c_Id = @id";
cmd.Parameters.Add(new SqlParameter("@check", check));
cmd.Parameters.Add(new SqlParameter("@id", id));
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
}
}
public static DataTable select()
{
DataTable dt = null;
try
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["mydbConnectionString"].ConnectionString))
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from cTable";
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
catch (Exception ex)
{
return null;
}
}
public DBhelper()
{
//
// TODO: Add constructor logic here
//
}
}


بعدش داخل رخداد page_load مینویسیم :


protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = DBhelper.select();
CheckBoxList1.DataSource = dt;
CheckBoxList1.DataTextField = "c_Contetn";
CheckBoxList1.DataValueField = "c_Id";
CheckBoxList1.DataBind();
GridView1.DataSource = dt;
GridView1.DataBind();
}

}


همچنین رخداد checkBoxList_textChange رو هم ویرایش می کنیم :


protected void CheckBoxList1_TextChanged(object sender, EventArgs e)
{
Session["tick"] = null;
foreach (ListItem li in CheckBoxList1.Items)
{
if (li.Selected)
{
Session["tick"] += li.Value + '/';
}
DBhelper.update(li.Value, li.Selected);
}
}


و در پایان رخداد page_preRender رو اینطوری مقدار دهی می کنیم :


void page_preRender()
{
DataTable dt = DBhelper.select();
CheckBoxList1.DataSource = dt;
CheckBoxList1.DataTextField = "c_Contetn";
CheckBoxList1.DataValueField = "c_Id";
CheckBoxList1.DataBind();
GridView1.DataSource = dt;
GridView1.DataBind();
if (Session["tick"] != null)
{
foreach (string s in Session["tick"].ToString().Split('/'))
{
if (s != string.Empty)
{
int x = Convert.ToInt32(s.Trim());
CheckBoxList1.Items[x-1].Selected = true;
}
}
}
}

yousef.scof
دوشنبه 22 دی 1393, 14:31 عصر
سلام
ممنون که پاسخ دادید کاملا هم چیزی که میخوام همین هست
فقط یک سوال طبق برداشتی که از کدها دارم باید Checklist و GridView از طریق همین کدها به دیتابیس و دیتاها متصل بشن درسته ؟
اما انگار برای من چنین اتفاقی نمی افته و فرم خالی نمایش داده میشه

keiv@n
دوشنبه 22 دی 1393, 14:35 عصر
سلام
ممنون که پاسخ دادید کاملا هم چیزی که میخوام همین هست
فقط یک سوال طبق برداشتی که از کدها دارم باید Checklist و GridView از طریق همین کدها به دیتابیس و دیتاها متصل بشن درسته ؟
اما انگار برای من چنین اتفاقی نمی افته و فرم خالی نمایش داده میشه

سلام

تنظیمات کانکشن استرینگ خودتونو اضافه کردین؟

مال من اینه : mydbconnectionstring

اطلاعات جدول و فیلدها در تصویر اومده c_Src لازم نیست استفاده بشه مختص آدرس تصاویر ، c_Checked از نوع boolean هست

yousef.scof
دوشنبه 22 دی 1393, 15:08 عصر
دیتابیس کامل مثل شما درست کردم از نظر اسم .. (فقط از sql express فکر کنم استفاده کردم (خود Vs))
سورس دقیقا به همون شکل
نوع Boolean هم نداره بجاش از Bit استفاده کردم
در حالت عادی فرم خالی هست اما اگه از طریق Data Source استفاده کنم ابزارهای GridView و Checklist به دیتابیس متصل کنم نمایش پیدا میکنه اما تغییرات در دیتابیس ذخیره نمیشه (Autopostback چک لیست فعال کردم)
http://8pic.ir/images/ec2bl4o2lhcumoceo5ew.jpg

keiv@n
دوشنبه 22 دی 1393, 15:30 عصر
لازم نیست از قسمت gridview tasks دیتاسورس گرید ویو رو مقدار دهی کنی .... و همچنین این کارو برای checkBoxList انجام نده

اصلا نیازی به کنترل sqldatasource نداری ، فقط در ابتدای کار یه کنترل sqldatasource داخل صفحه قرار بده و کانفیگش کن تا کانکشن استرینگت داخل فایل وب کانفیگ ساخته بشه بعدش sqldatasource رو از صفحه delete کن کانکشن استرینگ دست نمیخوره...

مقدار دهی datasource کنترل gridview , checkBoxList داخل page_load انجام میشه

اگه بازم مشکلی هست سورس رو برات بفرستم (من از vs2013 express استفاده کردم )

yousef.scof
دوشنبه 22 دی 1393, 16:09 عصر
متاسفانه باز هم چیزی برای نمایش نیست
منم حدودا کار با asp تازه شروع کردم و خب اول کاری خورد به پروژه دانشگاه کلا باید تا 2 روز دیگه تحویل بدم ....
سر این مشکلم الان حدود 4-5 روزه درگیرم تا اینکه شما لطف کردید دقیقا همون چیزی که میخواستم گفتید
این سورس ببینید شاید من جایی اشتباه کردم
بازم ممنون
127503

keiv@n
دوشنبه 22 دی 1393, 16:42 عصر
درست شد

ولی باید تنظیمات کانکشن استرینگ رو برای سیستم خودت تغییر بدی چون Data source کامپیوتر من با Data source کامپیوتر شما متفاوته

مشکل پروژت این بود که یه کلاس DBHELPER جداگانه در نظر نگرفتی ! اضافه کردم برات ...

yousef.scof
دوشنبه 22 دی 1393, 16:59 عصر
واقعا ممنون و خسته نباشی:قلب::قلب::قلب::قلب::قلب:

keiv@n
دوشنبه 22 دی 1393, 17:07 عصر
خواهش

فقط یه مشکلی که ممکن پیش بیاد اینه که :

اگر داخل پایگاه داده تعدادی از فیلدهای چک باکست پیش فرض تیک خورده باشند به هنگام load شدن صفحه اون عناصر تیک خورده توسط checkBoxList نمایش داده نمیشه

راه حلش باید داخل IsPostback! مربوط به page_load تغییراتی بدی ....