PDA

View Full Version : این ارور چه طوری رفع میشه



bbc_sh
یک شنبه 03 شهریور 1387, 22:21 عصر
بوسیله باتنی که توی گرید ویو هست وبا تشخیص commandname میخوام ایدی همون سطر از گریدویو که روی باتن اون کلیک میشه وارد پایگاه داده بشه؟آیدی که وارد پایگاه میشه از نوع string هست.این هم کدش:

int currentrowindex = Int32.Parse(e.CommandArgument.ToString());
string productid = GridView1.DataKeys[currentrowindex].Value.ToString();
if(commandname="bbbbb")
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = new SqlConnection();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_ins_nemoune";
cmd.Parameters.AddWithValue("@product_id", productid);
cmd.Parameters.AddWithValue("@cu_username", Session["user"].ToString());
cmd.Parameters.AddWithValue("@orderdate", DateTime.Now.ToString());
con.Open();
cmd.ExecuteNonQuery();
con.Close();}





http://i34.tinypic.com/1zfhjbb.jpg

Behrouz_Rad
یک شنبه 03 شهریور 1387, 23:48 عصر
CommandArgument رو به منبعی بایند کردی که ایندکسش برای DataKeys ناشناخته ست. احتمالاً CommandArgument رو برابر با فیلدی از نوع AutoNumber قرار دادی که در این صورت اشتباه هست.
DataKeys اندیس سطر رو میگیره.
البته مشخص نکردی که این کدها رو در کدوم روال GridView نوشتی. مکان صحیح، RowCommand هست.
در RowCommand نمی تونی به RowIndex دسترسی داشته باشی. بنابراین یک راه اینه که یک Label با Visible برابر با false در سطرهای GridView قرار بدی و در روال RowCreated با FindControl بهش ارجاع پیدا کنی و با e.Row.RowIndex بهش اندیس سطر جاری رو اختصاص بدی. در این حالت به راحتی می تونی sender رو به Button تبدیل کنی، به Parent اش ارجاع پیدا کنی، باز هم به Parent ارجاع پیدا کنی تا در نهایت به ردیفی که Button در اون کلیک شده برسی. در اینجا می تونی به Label ارجاع پیدا کنی، مقدارش رو به دست بیاری و به پارامتر DataKeys پاس بدی.

موفق باشید.

bbc_sh
دوشنبه 04 شهریور 1387, 01:27 صبح
من datakeynames رو اشتباه نوشته بودم,اگه نمیشه به rowindex دسترسی داشت در rowcommand پس توی لینک زیر چه طوری این کار رو انجام داده؟
http://www.ezzylearning.com/tutorial.aspx?tid=5066444

Behrouz_Rad
سه شنبه 05 شهریور 1387, 16:38 عصر
در اون مقاله به RowIndex دسترسی پیدا نشده. RowIndex از CommandArgument گرفته شده که اون هم از ProductID تغذیه میشه.
اون کسی که اون مقاله رو نوشته از دیتابیس Northwind استفاده و این جور فرض کرده که مشخصه ی محصولات دقیقاً از 1 شروع و به شکل تصاعدی افزایش پیدا می کنه.
حال فرض کن که تو رکورد اول رو حذف می کنی. در نتیجه مشخصه ی محصولات از 2 شروع میشه. در این حالت اگر فقط یک محصول با آی دی 2 در جدول وجود داشته باشه، با اون کد تو قصد بازیابی دومین ردیف رو داری! و از اونجایی که چنین رکوردی وجود نداره در نتیجه اون خطا رو می بینی.

موفق باشید.

bbc_sh
چهارشنبه 06 شهریور 1387, 09:46 صبح
من ایت کد رو نوشتم و ستونی از نوع باتن رو انتخاب کردم.جواب میده.ولی قبلا اومده بودم باتن رو توی template گذاشته بودم جواب نمیداد. چرا؟

string productid = GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();