PDA

View Full Version : مشکل با متد Fincontrol



amin750
جمعه 15 شهریور 1392, 11:42 صبح
دوستان من این کد رو دارم مربوط به سبد خریده موقعی که میخوام اطلاعاتو از گرید بخونم مشکل دارم
اگه Row[0] بش بدم فقط یه سطر اضافه میکنه اگه id بش بدم از findcontrol ایراد میگیره
در ضمن تعداد هم داخل یه تکست باکس ریختم با مقدار پیش فرض 1 موقعی که میخوام بشترش کنم ثبتش نمیکنه همون 1 رو ثبت میکنه
چه کار کنم؟؟
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{

int cartid=Convert.ToInt32(e.CommandArgument);
if (Session["User"] == null)
{
this.ClientScript.RegisterStartupScript(this.GetTy pe(), "alert", "alert('برای خرید لطفا وارد شوید'); window.location.href = 'login.aspx';", true);
}
else
{
int userid;
SqlConnection con = new SqlConnection(constr);
con.Open();
SqlCommand cmd =new SqlCommand("select userid from users where username=@u",con);
cmd.Parameters.AddWithValue("@u",Session["User"].ToString());
if (cmd.ExecuteScalar()!=null)
{
userid =Convert.ToInt32(cmd.ExecuteScalar().ToString());
if (e.CommandName == "select")
{
TextBox txtTedad=(TextBox)GridView2.Rows[cartid].FindControl("txtTedad");
Label lblName=(Label)GridView2.Rows[cartid].FindControl("lblName");
Label lblPrice=(Label)GridView2.Rows[cartid].FindControl("lblPrice");

SqlCommand cmd1 = new SqlCommand("insert into sefaresh(userid,productname,unitprice,tedad) values(@uid,@pn,@up,@t)",con);
cmd1.Parameters.AddWithValue("@uid",userid);
cmd1.Parameters.AddWithValue("@pn", lblName.Text);
cmd1.Parameters.AddWithValue("@up", lblPrice.Text);
cmd1.Parameters.AddWithValue("@t", txtTedad.Text);
cmd1.ExecuteNonQuery();
con.Close();
Session.Add("cart", cartid);
}
}

}
}

mahdioo12194
جمعه 15 شهریور 1392, 11:58 صبح
TextBox txtTedad = ((TextBox)GridView2.Rows[cartid].FindControl("txtTedad") as TextBox).Text.ToString();

amin750
جمعه 15 شهریور 1392, 12:25 عصر
.text.tostring(); قبول نمیکنه
این ارور هم میده
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

mahdioo12194
جمعه 15 شهریور 1392, 12:37 عصر
CommandArgument رو چی گذاشتی که cartid ازاون مقدار می گیره؟!

amin750
جمعه 15 شهریور 1392, 19:16 عصر
CommandArgument رو آی دی محصولاتم گذاشتم که مربوط به هر سطره

mahdioo12194
جمعه 15 شهریور 1392, 19:23 عصر
commandArgument باید در مثال شما رو ی rowindex باشه نه آدی محصولت !! مثلا ایدی محصولت 1000 باشه با کدی که نوشتی میره سطر 1000 گرید دنبال کنترل ها می گرده!!!!

amin750
جمعه 15 شهریور 1392, 20:18 عصر
rowindex رو چطور تعریف کنم؟؟

mahdioo12194
جمعه 15 شهریور 1392, 20:47 عصر
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"

amin750
جمعه 15 شهریور 1392, 21:13 عصر
ممنون این مشکل حل شد حالا تعداد رو اضافه نمیکنه مثلا 3 میزنم همون 1 میمونه
اونو چیکار کنم؟
بخوام تعداد رو در قیمت ضرب کنم چطور باید توی جدول ذخیره کنم؟؟؟

mahdioo12194
جمعه 15 شهریور 1392, 21:35 عصر
واسه تعداد breakpoint بزار ببین مشکل چیه

واسه قیمت کل هم خوب تعداد رو در قیمت ضرب کن بریز تو یه متغیر بعد اونو درج کن!

amin750
جمعه 15 شهریور 1392, 21:41 عصر
خاصیت تکست تعداد رو خالی نذاشتم 1 توش گذاشتم هر دفعه همون 1 رو ثبت میکنه، خالیش کردم درست شد
واسه اینکه مقدارش خالی نباشه و هر دفعه که تغییر هم کرد تغییر کنه چه کار باید کنم؟؟

mahdioo12194
جمعه 15 شهریور 1392, 21:51 عصر
یه توضیح کلی بده که سبد خریدتو چه جور پیاده سازیش کردی ؟

amin750
جمعه 15 شهریور 1392, 22:01 عصر
خیلی ساده
اگه کاربر وارد شده باشه میتونه با وارد کردن تعداد و کلیک روی اضافه کردن به سبد خرید اطلاعات توی بانک ذخیره کنه
حالا چند تا مشکل دارم
1-چطوری توی تکست باکس عدد 1 رو بذارم که اگه کاربر خواست عوضش کنه همون 1 ثبت نشه (الان اگه تغییر خاصیت تکست رو 1 گذاشتم اگه تغییر هم کنه همون 1 ثبت میشه، وقتی برمیدارمش دستی وارد میکنم چیزی ثبت نمیکنه!!!!)
2-جمع کل خرید رو چطوری حساب کنم؟
3-چطور هر سبد به کاربر خودش نشون بدم؟؟ ( با خرید user id هم ثبت میشه)
4-واسه ثبت نهایی چه کار کنم؟ چطوری اطلاعات رو نگه دارم و کد پیگیری بدم ولی سبد خرید کاربر خالی بشه؟؟ (اطلاعات برای مدیر بمونه)

mahdioo12194
جمعه 15 شهریور 1392, 22:18 عصر
یعنی یه دکمه گذاشتی تو گرید وقتی می زنی اطلاعات رو در دیتابیس ذخیره می کنه؟!

amin750
جمعه 15 شهریور 1392, 22:21 عصر
آره لینک باتنه اونی که بالا هم گذاشتم کدمه

mahdioo12194
جمعه 15 شهریور 1392, 22:24 عصر
وقتی دکمه اضافه به سبد خرید رو می زنی اول gridview.Databind() کن که اون مقدار جدید تعداد بایند شود به گریدت !!

amin750
جمعه 15 شهریور 1392, 22:47 عصر
خیلی ساده
اگه کاربر وارد شده باشه میتونه با وارد کردن تعداد و کلیک روی اضافه کردن به سبد خرید اطلاعات توی بانک ذخیره کنه
حالا چند تا مشکل دارم
1-چطوری توی تکست باکس عدد 1 رو بذارم که اگه کاربر خواست عوضش کنه همون 1 ثبت نشه (الان اگه تغییر خاصیت تکست رو 1 گذاشتم اگه تغییر هم کنه همون 1 ثبت میشه، وقتی برمیدارمش دستی وارد میکنم چیزی ثبت نمیکنه!!!!)
2-جمع کل خرید رو چطوری حساب کنم؟
3-چطور هر سبد به کاربر خودش نشون بدم؟؟ ( با خرید user id هم ثبت میشه)
4-واسه ثبت نهایی چه کار کنم؟ چطوری اطلاعات رو نگه دارم و کد پیگیری بدم ولی سبد خرید کاربر خالی بشه؟؟ (اطلاعات برای مدیر بمونه)
مشکل 1و3 رو خودم حل کردم
مشکل 2و 4 رو دوستان کمک میکنن؟؟
مخصوصا 4

mahdioo12194
جمعه 15 شهریور 1392, 22:57 عصر
مشکل 1 چه جور حلش کردی؟

واسه 4 هم یه فیلد بزار اگه 1 شد یعنی اتمام خرید اگه 0 یعنی هنوز کاربر خریدشو تمام نکرده!

amin750
جمعه 15 شهریور 1392, 23:20 عصر
توی page_load بایند کرده بودم هردفعه اجرا میشد دوباره همون 1 رو ثبت میکرد با not کردن IsPostBack حل شد

میشه بیشتر توضیح بدی چطوری کنترلش کنم؟ مخم دیگه کار نمیکنه!!!:ناراحت:

mahdioo12194
جمعه 15 شهریور 1392, 23:29 عصر
اگه نظر منو می خوای کلا با سشن و دیتاتیبل پیاده سازیش کن راحت تره الان می خوای حذف کنه یه محصول رو کاربر از سبد خریدش باید از دیتابیس حذف شود این اصلا بهینه نیستش!!!

amin750
جمعه 15 شهریور 1392, 23:44 عصر
چطوری بریزمش تو سشن و دیتا تیبل؟؟
اون آموزشه که هست تو سایت اسمش shop رو دیدم اصلا ازش سر در نیاوردم پیچیده بود!!

mahdioo12194
شنبه 16 شهریور 1392, 00:04 صبح
همون جور که از گرید اطلاعاتو گرفتی بعد درجش کردی در دیتابیس حالا در جش کن در دیتاتیبل و تمام عملیات رو با دیتاتیبل دیگه حالا انجام بده!!

amin750
شنبه 16 شهریور 1392, 00:10 صبح
بیشتر توضیح میدی
اگه میشه یه نمونه بذاز

mahdioo12194
شنبه 16 شهریور 1392, 00:15 صبح
سرچ بزنی زیاد پیدا می کنی اگه پیدا نکردی آنوقت ......؟!

amin750
شنبه 16 شهریور 1392, 00:31 صبح
میشه درج کرد توی دیتاتیبل؟؟ درجش کنم توی دیتا تیبل بعد ثبت نهایی رو که زدم دیتاتیبل رو بریزم تو دیتابیس؟؟؟
بعد دیتا تیبل رو خالی کنم درسته؟؟

mahdioo12194
شنبه 16 شهریور 1392, 00:37 صبح
بله درسته !!!

amin750
شنبه 16 شهریور 1392, 15:01 عصر
با این کد یه سطر رو به دیتا تیبل اضافه کردم
حالا اگه بخوام این سطر بمونه و با کلیک کردن سطرهای دیگه هم اضافه بشه چه کار باید کنم؟؟
الان با هر کلیک کردن فقط یه سطر رو اضافه میکنه به سبد سطرهای قبلی حذف میشن!!

if (e.CommandName == "select")
{
TextBox txtTedad = ((TextBox)GridView2.Rows[cartid].FindControl("txtTedad") as TextBox);
Label lblName = ((Label)GridView2.Rows[cartid].FindControl("lblName") as Label);
Label lblPrice = ((Label)GridView2.Rows[cartid].FindControl("lblPrice") as Label);
int total;
total = (Convert.ToInt32(txtTedad.Text.ToString())) * (Convert.ToInt32(lblPrice.Text.ToString()));
DataTable dt = new DataTable();
DataRow dr = dt.NewRow();
dt.Columns.Add("userid",typeof(int));
dt.Columns.Add("lblName", typeof(string));
dt.Columns.Add("lblPrice", typeof(string));
dt.Columns.Add("total", typeof(int));
dt.Columns.Add("txtTedad", typeof(string));
dr["userid"] = userid;
dr["lblName"] = lblName.Text;
dr["lblPrice"] = lblPrice.Text;
dr["total"] = total;
dr["txtTedad"] = txtTedad.Text;
dt.Rows.Add(dr);
Session.Add("cart", dt);

}

mahdioo12194
شنبه 16 شهریور 1392, 15:22 عصر
سشن رو اول تبدیل کن به دیتا تیبل بعد سطر جدید اضافه کن چون مقادیر قبلی درون سشن هست دیگه پس تبدیلش کن به دیتا تیبل در ضمن لزومی نداره هر سری ستون اضافه کنی فقط برای

اول این کارو انجام بده اگر سشن خالی نبود دیگه ستون ها رو داره دیگه پس فقط به دیتاتیبل تبدیلش کن!!

amin750
شنبه 16 شهریور 1392, 15:31 عصر
تبدیل کردم اینم کد بایندمه توی صفحه سبد خرید
DataTable dt = (DataTable)Session["cart"];
GridView1.DataSource = dt;
GridView1.DataBind();
حالا باید به صفحه سبد خرید سطر اضافه کنم؟؟؟ چطوری؟؟

amin750
شنبه 16 شهریور 1392, 16:51 عصر
کسی از دوستان نیست به ما کمک کنه؟؟