PDA

View Full Version : عدم دسترسی مقادیر داخل هر سلول گرید ویو بلافاصله بعد از بایند شدن



DotNet_King
جمعه 11 مرداد 1387, 08:53 صبح
با سلام و خسته نباشید به دوستان عزیز
من قصد دارم سطر هایی از گرید ویو زیر که مقدار ستون ظرفیت پر شده کلاس با ظرفیت کلش برابره رو مشخص کنم و بعد رنگ بک گراند اون سطر رو مثلا قرمز کنم اما نمی تونم به مقداری که داخل ستون های که معرفی کردم دسترسی پیدا کنم. این کد رو هم داخل رو کریت نوشته ام به ظاهر منطقیه ولی جواب نمی ده . مثلا برای ادیت کردن این کار جواب می ده





ProtectedSub GridView1_RowCreated(ByVal sender AsObject, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles stGview.RowCreated
Dim yetOcc AsString

If e.Row.RowType = DataControlRowType.Header Then

ElseIf (e.Row.RowType = ListItemType.Item) Or (e.Row.RowType = ListItemType.AlternatingItem) Then
yetOcc = CType(e.Row.Cells(4).Controls(0), DataBoundLiteralControl).Text
Response.Write(yetOcc.ToString() + "<hr>")


yetOcc = CType(e.Row.Cells(4).Controls(0), DataBoundLiteralControl).Text



ElseIf e.Row.RowType = ListItemType.EditItem Then

ElseIf e.Row.RowType = ListItemType.Footer Then



EndIf
EndSub



این کار رو با گذاشتن یک لیترال و بایند کردن اطلاعات به اون ، هم انجام دادم ولی بازم نمی شه
اگه ممکنه راهنماییم کنید که باید چی کار کنم؟
با تشکر

DotNet_King
شنبه 12 مرداد 1387, 15:44 عصر
شاید سوالمو بد مطرح کردم
کسی نمی دونه به چه صورت میشه مقادیر رو از هر یک از سلول ها رو بدست آورد؟
چرا کدم جواب نمی ده؟

لطفا کمک

baran_mehr
شنبه 12 مرداد 1387, 15:57 عصر
سلام گلم.
نمدونم تا چه حد سوالتو متوجه شدم اما:منظورت اینکه یعد از اینکه اطلاعاتت رو تو گرید میریزی نمیتونی بلافاصله مثلا عمل مقایسه خونه هاش رو با یه مقدار انجام بدی؟؟منظورت اینه؟؟

DotNet_King
شنبه 12 مرداد 1387, 17:09 عصر
سلام ممنونم
من یه چیزی می خوام مثه سیستم های انتخاب رشته دانشگاها

همون اولین بار که گرید ویو ایجاد میشه چک کنه ظرفیتو اگه پر بود سطرو قرمز رنگ ک غیر فعال کنه

ولی نمی تونم مقادیر هر سلول رو بعد بایند شدن دریافت کنم ! من این بار هم دقیقا همون کاری رو می کنم که برای ادیت و دلیت و .... می کنم ولی این بار جواب نمی ده! کدی که به نظرم می رسید همون بالایی است که نوشتم

کد نویسی هم تا الان همون گرید ویو معروفه آقای راده!
اگه ممکنه کمک کنید ببینم چه طور باید این مقادیر رو از سلول دریافت کنم! یا اشکال کارم کجاست

baran_mehr
شنبه 12 مرداد 1387, 17:27 عصر
سلام DotNet_King جان.
من متاسفانه گرید ویو اقای راد رو ندیدم.اما برای دسترسی به خونه های گرید ویو میتونی به این صورت عمل کنی

Textbox1.Text=GridView1.Row.Item(شماره سطر) .Cell (شماره ستون) .Text
اگر برای پر کردن گریدویو از شئ استفاده میکنی ممکنه بار اول گرید ویو درست کار نکنه یعنی مثلا ممکنه نیاز به دوبار بار شدن صفحه داشته باشه.
عسلم اگه همچین مشکلی داشتی میتونی این قسمت از برنامه خودت رو با کد به دیتابیس متصل بشی ، با این کار دستت باز تر میشه
شاد باش و مهربون.

baran_mehr
شنبه 12 مرداد 1387, 17:44 عصر
راستی DotNet_King جان.
چون ستونها مشخصه چی هست و باید به چه صورت با همدیگه مقایسه بشه .
شما میتونی یه For بزاری که از اول تا اخر گرید رو طی کنه و مقایسه دو فیلد رو با هم انجام بدهمثلا:


For i=0 To Gridview1.row.count-1
IF Gridview1.row.item(i).cells(3).text= Gridview1.row.item(i).cells(4).text then
عملیات غیر فعال کردن سطر
Endif
next

DotNet_King
شنبه 12 مرداد 1387, 22:53 عصر
دوست عزیز از لطف و توجه تون ممنونم ولی متاسفانه باز هم جواب نداد.
من سورس اون صفحه رو می زارم
لطفا کمک کنید دوستان ! هر مدلی که به ذهنم رسیده این دستورا رو امتحان کردم:گریه:

سورس رو میزارم تا راحت تر بشه نظر داد مشکل از کجاست



yetOcc = stGview.Rows.Item(e.Row.RowIndex).Cells(2).Text
Response.Write(yetOcc)

baran_mehr
شنبه 12 مرداد 1387, 23:50 عصر
DotNet_King جان من فایلت رو گرفتم.فایلت رو کامل نزاشته بودی و بیشتر چیزاش به مشکل بر میخورد.
من خودم یه جدول درست کردم و به گرید متصل کردم و با همون حلقه For که گذاشته بودم به نتیجه رسیدم.
اگر منظورت اینکه درسهایی که ظرفیتشون پر شده رو غیر فعال کنی ،خوب با همین For میتونی.
کافیه شماره ستون ظرفیت رو به یک طرف شرط بدی و شماره ستون ظرفیت باقیمانده رو به طرف دیگه و در صورت تساوی این دو با هم ،یعنی ظرفیت این درس پر شده و باید غیر فعال بشه که دستور غیر فعال شدن رو بین If بنویس.

DotNet_King
یک شنبه 13 مرداد 1387, 09:59 صبح
میشه فایلتون رو اینجا ارائه بدید شاید مشکل من هم رفع شه.


من فقط کوئری تولید بانک رو نزاشته ام بقیه اش کامله. اون هم اگه بخواهید بگید بزارم


ممنون از لطفتون دوست گرامی

baran_mehr
یک شنبه 13 مرداد 1387, 12:51 عصر
سلام عزیزم.:قلب:
من مجبور شدم بیشتر چیزای پروژت رو حذف کنم. این چیزی که میگم اینطوریه

DotNet_King
یک شنبه 13 مرداد 1387, 14:34 عصر
باران عزیز ممنوم از لطفت
مشکلم با کمک شما تا یه زیادی حدی حل شد! برام جالبه که چرا گرید ویو اینقدر برای برنامه نویسان مختلف متفاوته ! من با روش شما زیاد کار نکردم ولی جواب می داد. مشکل من این بود که به جای آی دی گرید ویو از e استفاده می کردم. این طوری با کد نویسی خودم هم سازگارتر میشه


stGview.Rows(gvRow.RowIndex).

از e استفاده می کردم
e.Rows(gvRow.RowIndex).


ولی هنوزم مشکل دارم
این کار رو باید خارج از event ، rowCreate انجام بدم! با اون حلقه ای که شما عنوان کردید. این باعث می شه برنامه دو بار اجرا بشه! فک نکنم بهترین گزینه باشه

جالب این کد پایین در این حالت جواب می ده ولی در وقتی تو row create می زارمش ارور میده شماره ایندکس متفاوت نیست!
امید وارم به درد دوستان بخوره





Dim yetOcc As String = String.Empty
Dim NowOcc As String = String.Empty
For Each gvRow As GridViewRow In stGview.Rows
yetOcc = CType(stGview.Rows(gvRow.RowIndex).Cells(4).Contro ls(0), DataBoundLiteralControl).Text.Trim()
NowOcc = CType(stGview.Rows(gvRow.RowIndex).Cells(5).Contro ls(0), DataBoundLiteralControl).Text.Trim()
If (yetOcc = NowOcc) Then
stGview.Rows(gvRow.RowIndex).Visible = False

'یا مثلا حذف چک باکس و جلوگیری از انتخاب ....

End If

baran_mehr
یک شنبه 13 مرداد 1387, 15:51 عصر
DotNet_King جان .
برام جالب شد بدونم چی کار کردی؟ نمیدونم چرا دستور بالا که گذاشتی کار نمیکنه از ForEach گرفته تا بیشتر چیزاش گیر میده .نمیدونم قضیش چیه
راستی شما اگه بخواین ایندکس 2 از گرید رو غیر فعال کنید .چه کار میکنید؟؟؟

DotNet_King
یک شنبه 13 مرداد 1387, 16:05 عصر
همون سورس بالاست دیگه!

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

baran_mehr
یک شنبه 13 مرداد 1387, 19:06 عصر
منظورتون این قسمته:

stGview.Rows(gvRow.RowIndex).Visible = False
اما اخه به gvRow.RowIndex گیر میده ، این برای چی هست ؟ اخه کار نمیکنه

DotNet_King
یک شنبه 13 مرداد 1387, 23:07 عصر
کل سورسامو گفتم که اون بار اولی آپلود کرده بودم!
واقعا این رو باید اساتید جواب بدن! هر چند که .........

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

mehdi.mousavi
دوشنبه 14 مرداد 1387, 01:12 صبح
سلام ممنونم
من یه چیزی می خوام مثه سیستم های انتخاب رشته دانشگاها

همون اولین بار که گرید ویو ایجاد میشه چک کنه ظرفیتو اگه پر بود سطرو قرمز رنگ ک غیر فعال کنه

ولی نمی تونم مقادیر هر سلول رو بعد بایند شدن دریافت کنم ! من این بار هم دقیقا همون کاری رو می کنم که برای ادیت و دلیت و .... می کنم ولی این بار جواب نمی ده! کدی که به نظرم می رسید همون بالایی است که نوشتم

کد نویسی هم تا الان همون گرید ویو معروفه آقای راده!
اگه ممکنه کمک کنید ببینم چه طور باید این مقادیر رو از سلول دریافت کنم! یا اشکال کارم کجاست

سلام.
اول یه handler درست کنید برای rowdatabound event. سپس در این handler، مطمئن بشید که Row Type اتون یه DataRow هستش. بعنوان مثال:



protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow row = e.Row;
if (row.RowType != DataControlRowType.DataRow)
return;

//row.DataItem
}


سپس کافیه تا row.DataItem رو به Object ای که در DataSource اتون تعیین کردین و بهش Bind کردین، Cast کنید و سپس کلیه مقادیر Row ای که در حال Bind شدن هستش رو خواهید داشت و میتونید رنگ Row مورد نظر رو در صورت نیاز تغییر بدین.

DotNet_King
دوشنبه 14 مرداد 1387, 13:11 عصر
مهدی آقا
از لطفتون ممنون مشکلم کاملا حل شد.

فقط فکر می کنم اون نامساوی بالا باید مساوی بشه تا آیتم ها رو بده! در این حالت هدر و فوتر رو می ده


موفق باشید