PDA

View Full Version : گرید ویو بدست اوردن مقدرا سلول



saeed31641
پنج شنبه 10 فروردین 1391, 15:22 عصر
سلام دوستان یه سوال ساده که هر چی سرچ زدم چیزی که میخاستم پیدا نکردم
من خودم یه تابع نوشتم که داخل اون تابع میخام مقدار یکی ستوا نها ی گرید یو بدست بیارم
فقط من میخام تابعب که نوشتم استفاده کنم نه رویداهای گرید ویو .

item.ProductName = GridView1.Rows[0].Cells[1].Text;
خطا میده

hamid_shrk
پنج شنبه 10 فروردین 1391, 15:28 عصر
کجا این دستور رو مینویسید ؟ تو پیج لود ؟
بهتر توی رویداد DataBound از گرید ویو تو بنویسید.

saeed31641
پنج شنبه 10 فروردین 1391, 15:34 عصر
کجا این دستور رو مینویسید ؟ تو پیج لود ؟
بهتر توی رویداد DataBound از گرید ویو تو بنویسید.

دوست من گفتم خودم یه تابع نوشتم از رویداد نمیخام استفاده کنم

mehdi_nk
پنج شنبه 10 فروردین 1391, 15:38 عصر
az en estefade kon dadash, man alan gozashtam dare javab mide,


foreach (GridViewRow gvr in GridView1.Rows)
{
string PrimaryKey = GridView1.DataKeys[gvr.RowIndex].Values[0].ToString();


}

hamid_shrk
پنج شنبه 10 فروردین 1391, 15:52 عصر
دوست من گفتم خودم یه تابع نوشتم از رویداد نمیخام استفاده کنم
خوب تابعتون رو کی فراخوانی میکنید؟
باید زمانی باشه که دیتا پر شده باشه ، تو پیج لود دیتا پر نشده.
اروری که میده چیه ؟

saeed31641
پنج شنبه 10 فروردین 1391, 16:41 عصر
خوب تابعتون رو کی فراخوانی میکنید؟
باید زمانی باشه که دیتا پر شده باشه ، تو پیج لود دیتا پر نشده.
اروری که میده چیه ؟

Index was out of range. Must be non-negative and less than the size of the collection.

Parameter name: index
دوست عزیر گرید ویو یعنی دیتا پر شد دیگه بعد تابع فراخوانی میشه

saeed31641
پنج شنبه 10 فروردین 1391, 16:41 عصر
az en estefade kon dadash, man alan gozashtam dare javab mide,


foreach (GridViewRow gvr in GridView1.Rows)
{
string PrimaryKey = GridView1.DataKeys[gvr.RowIndex].Values[0].ToString();


}


داخل تابع نیمره یعنی دستور بعد از if اجرا نمیشه

hamid_shrk
پنج شنبه 10 فروردین 1391, 16:57 عصر
متوجه منظورتون نشدم.
ولی این ارور معنیش اینه که سطری وجود نداره تو گریدتون.

saeed31641
پنج شنبه 10 فروردین 1391, 17:02 عصر
متوجه منظورتون نشدم.
ولی این ارور معنیش اینه که سطری وجود نداره تو گریدتون.


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

hamid_shrk
پنج شنبه 10 فروردین 1391, 17:07 عصر
این شرط رو بذارید ببینید اصلا توش میره :

if(gridview.Rows.Count>0)

saeed31641
پنج شنبه 10 فروردین 1391, 17:50 عصر
این شرط رو بذارید ببینید اصلا توش میره :

if(gridview.Rows.Count>0)



مرسی دوست عزیز شرط به ازاری بزرگتر مساوی 0 درست اجرا میشه
ولی مشکلم هنوز حل نشده ها

hamid_shrk
پنج شنبه 10 فروردین 1391, 19:01 عصر
خوب این یعنی که تعداد row شما صفر هست ، باید جایی تابعتون رو فراخوانی کنید که مطمئن باشید داده ها پر شدند.
احتمالا وقتی تابع رو فراخوانی میکنید با رفرش صفحه گرید ویو هم دوباره پر میشه.

saeed31641
پنج شنبه 10 فروردین 1391, 22:42 عصر
خوب این یعنی که تعداد row شما صفر هست ، باید جایی تابعتون رو فراخوانی کنید که مطمئن باشید داده ها پر شدند.
احتمالا وقتی تابع رو فراخوانی میکنید با رفرش صفحه گرید ویو هم دوباره پر میشه.
دوست دوباره تشکرت میکنم ازت .
شما راست میگن حق باش ماست ببیند من از این لینک استفاده میکنم تابعشم ببیند
من از استفاده کردم .چه جوری از رفرشش جلوگیری کنم
popupModal

<

asp:HyperLinkID="HyperLink1"runat="server"
Text='<%# addbascket()

ImageUrl="~/pic/buy_book.gif"

NavigateUrl=<%# String.Format("javascript:OpenPopupModal('shopcart.aspx','110px', '110px','500px','720px')" ) %> ></asp:HyperLink>

تابعشم که معلوم addbascket
حالا این لینکو خارج گرید میزارم اصلا جواب نمیده یعنی باز نمیکنه .لینکش shopcart.aspx باز نمیکنه

hamid_shrk
پنج شنبه 10 فروردین 1391, 22:50 عصر
شما یکار کن ، وقتی رو لینک کلیک شد شما با یک متغیر استاتیک یا یک سشن کار فلگ رو بکن ، بعد تو همون رویداد databound از گریدتون این فلگ رو چک کنید که اگه true بود تابعتون رو فراخوانی کنید.

saeed31641
جمعه 11 فروردین 1391, 08:41 صبح
شما یکار کن ، وقتی رو لینک کلیک شد شما با یک متغیر استاتیک یا یک سشن کار فلگ رو بکن ، بعد تو همون رویداد databound از گریدتون این فلگ رو چک کنید که اگه true بود تابعتون رو فراخوانی کنید.



if (!IsPostBack)

{

flag =

true;

String Str = "select * from Book where";


ReciveId = Request.QueryString[

"id"];

int IntReciveId = Convert.ToInt32(ReciveId);

loginadmin SerachId = new loginadmin();

SqlDataSearch.SelectCommand = Str +

" Id='" + IntReciveId + "'";

{

}

حالا تو قسمت تابعم تو databound اینو نوشتنم


if (flag == true)

{

Addbasket();

}

خوب تو تابع اینو نوشتم
if


(GridView1.Rows.Count > 0)

{



foreach (GridViewRow gvr in GridView1.Rows)

{


string PrimaryKey = GridView1.DataKeys[gvr.RowIndex].Values[1].ToString();

}
همون خطا قبلی رو میده
البته استاتیک فلگو تعریف کردم

sarapepors
جمعه 11 فروردین 1391, 09:08 صبح
اگر میخواین یه سطر از گرید ویو رو کاربرتون انتخاب کنه خوب چرا یه ستون selectCommand برا گرید ویوتون نمیذارید ؟ چرا نمیخواین از رویدادهای گرید ویو استفاده کنید؟ شما با یک hyperlink که خارج از گرید ویو هست چطور میخواین تشخیص بدین کدوم سطر از گرید ویو انتخاب شده ؟ شاید هم من متوجه نشدم منظورتون رو

hamid_shrk
جمعه 11 فروردین 1391, 10:06 صبح
if (!IsPostBack)

{

flag =

true;

String Str = "select * from Book where";


ReciveId = Request.QueryString[

"id"];

int IntReciveId = Convert.ToInt32(ReciveId);

loginadmin SerachId = new loginadmin();

SqlDataSearch.SelectCommand = Str +

" Id='" + IntReciveId + "'";

{

}

حالا تو قسمت تابعم تو databound اینو نوشتنم


if (flag == true)

{

Addbasket();

}

خوب تو تابع اینو نوشتم
if


(GridView1.Rows.Count > 0)

{



foreach (GridViewRow gvr in GridView1.Rows)

{


string PrimaryKey = GridView1.DataKeys[gvr.RowIndex].Values[1].ToString();

}
همون خطا قبلی رو میده
البته استاتیک فلگو تعریف کردم
این کد رو کجا نوشید؟
لطفا وقتی پست میدید کدهاتون رو تو این کدها بزارین تا بتونیم بخونیمشون.

saeed31641
جمعه 11 فروردین 1391, 10:18 صبح
اگر میخواین یه سطر از گرید ویو رو کاربرتون انتخاب کنه خوب چرا یه ستون selectCommand برا گرید ویوتون نمیذارید ؟ چرا نمیخواین از رویدادهای گرید ویو استفاده کنید؟ شما با یک hyperlink که خارج از گرید ویو هست چطور میخواین تشخیص بدین کدوم سطر از گرید ویو انتخاب شده ؟ شاید هم من متوجه نشدم منظورتون رو

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

saeed31641
جمعه 11 فروردین 1391, 10:22 صبح
این کد رو کجا نوشید؟
لطفا وقتی پست میدید کدهاتون رو تو این کدها بزارین تا بتونیم بخونیمشون.

اولیش تو پیج لود
دومیش تو رویداد
GridView1_DataBound

سومیشم که تابع من هست جدا نوشتم
///////////////
این کدها رو داخل همون صفحه گرید ویو نوشتم

hamid_shrk
جمعه 11 فروردین 1391, 11:05 صبح
من گفتم وقتی رو لینک کلیک کرد فلگ رو true کنید ،معلومه بعد از کلیک postback ایجاد میشه و اصلا داخل شرط پیج لودتون هم نمیره.
به نظر من کلا مسیر رو اشتباه انتخاب کردین شما !!!
من تازه splution تون رو خوندم .
شما برای لینکتون تو گریدویو اول :


CommandName="detail"

و


CommandArgument='<%# Eval("idProduct") %>'

حالا تو رویداد row Command اینو بنویسید :

protected void Gridview1_RowCommand(object sender, GridViewCommandEventArgs e)
{

switch (e.CommandName.ToString())
{
case "Detail":
{

int Code=Convert.ToInt32(e.CommandArgument.ToString()) ;
break;
}

}
}

حالا این id رو بفرستید به اون صفحه جدید و از دیتا بیستون با توجه به این id دستور select رو بنویسید و رکوردتون رو واکشی کنید.
به همین راحتی

saeed31641
جمعه 11 فروردین 1391, 12:58 عصر
من گفتم وقتی رو لینک کلیک کرد فلگ رو true کنید ،معلومه بعد از کلیک postback ایجاد میشه و اصلا داخل شرط پیج لودتون هم نمیره.
به نظر من کلا مسیر رو اشتباه انتخاب کردین شما !!!
من تازه splution تون رو خوندم .
شما برای لینکتون تو گریدویو اول :


CommandName="detail"

و


CommandArgument='<%# Eval("idProduct") %>'

حالا تو رویداد row Command اینو بنویسید :

protected void Gridview1_RowCommand(object sender, GridViewCommandEventArgs e)
{

switch (e.CommandName.ToString())
{
case "Detail":
{

int Code=Convert.ToInt32(e.CommandArgument.ToString()) ;
break;
}

}
}

حالا این id رو بفرستید به اون صفحه جدید و از دیتا بیستون با توجه به این id دستور select رو بنویسید و رکوردتون رو واکشی کنید.
به همین راحتی



ببین دوست عزیز من مشکل کرفتن اید ندارم ایدی رو میگیرم فیلد های دیگه بانکو میخام مثلا فیلد نام کالا و قیمتش

توی rowcommand میخام این فیلد رو هم بگیر.اگه منظورت اینه با فیلد ایدی به بنک وصل شم اصلاعاته دیگه رو بگیر این روش درست ولی بهینه نیست وصل شدن به بانک
.دقیقا مثل ایدی که گرفتی میخام فیلد های دیگه رو هم بگیرم .بازم مرسی

hamid_shrk
جمعه 11 فروردین 1391, 13:04 عصر
بله زیاد بهینه نیست این روش .
ولی با این روش فقط یک فیلد رو میتونی بگیری از گرید و اگه میخوای بقیه رو هم بگیری باید با همون روش قبلی کار کنی فقط :


وقتی رو لینک کلیک کرد فلگ رو true کنید ،معلومه بعد از کلیک postback ایجاد میشه و اصلا داخل شرط پیج لودتون هم نمیره.

saeed31641
جمعه 11 فروردین 1391, 22:37 عصر
اولا سلام خدمت تمامی این دوستان.
چیزی رو که من مدنظزم بود پیدا نکردم چون چیزی که من میخاستم اصلا امکان نداشت .(با روشی که من میخاستم)
اولا بهترین پاسخ تو این تاپیک .نکته اخلاقیش بود. وقتی من میدیدم دوست بسیار عزیزم اینقدر قشنگ جواب من تو این تایپک با این سرعت میدادند خیلی واسعم جالب بود اگه من خودم بودم اینکار رو نمیکردم. بارها شده بود . بچه ها استارت موضوعی رو میزداند منم جوابشو بلد بودم ولی حال جواب دادنو نداشتم .
خوب من یه راه حلی خیلی بهتری پیدا کردم براتون میزارم واسعه کسانی که شاید بعدا دچار مشکل بشند
1-میخایم چند تا مقدرا از گرید ویو بگیریم






[HTML]
asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">


<Columns>
<asp:TemplateField>


<ItemTemplate>


<'اوکی'=asp:Button ID="Button1" runat="server" Text=")%>'


CommandArgument=


'<%#Eval("id") + "," + Eval("price") + "," + Eval("name") %>'


OnClick = "Button1_Click" />


</ItemTemplate>


</asp:TemplateField>


</Columns>


</asp:GridView>


<HTML/>




protected void Button1_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
string[] CommandArgument = btn.CommandArgument.Split(',');
string CommandArgument1 = CommandArgument[0];
string CommandArgument2 = CommandArgument[1];
string CommandArgument3 = CommandArgument[2];

saeed31641
جمعه 11 فروردین 1391, 22:41 عصر
مرسی دوست عزیز بابت وقتی که گذاشتی