PDA

View Full Version : سوال: چطور ميتونم به يه button تو gridView دسترسي پيدا كنم؟



baha_film
چهارشنبه 19 مرداد 1390, 22:02 عصر
من تو gridview emptyTemplate يه button گذاشتم كه ميخوام چك كنم اگه مجوز مديريت وجود داره visible بشه و اگه اين مجوز وجود نداره ، ديده نشه.
ولي مشكل اينه كه نميتونم از دستور button1.visible=false استفاده كنم و نميدونم چطور ميتونم به كنترل توي gridview دسترسي پيدا كنم.
اگه امكان داره اين خط رو برام بنويسيد و توضيح بديد.
ممنون

TeacherMath
چهارشنبه 19 مرداد 1390, 23:04 عصر
http://barnamenevis.org/showthread.php?124868-%D9%86%D8%AD%D9%88%D9%87-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D8%A2%DB%8C%D8%AA%D9%85%D9%87%D8%A7%DB%8C-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1%D9%88%D9%86-Template-%D8%AF%D8%B1-%DB%8C%DA%A9-DataGrid

hjran abdpor
پنج شنبه 20 مرداد 1390, 01:03 صبح
با سلام.

button txtbox = GridView2.SelectedRow.FindControl("buttonname") as button;

afshinmu
پنج شنبه 20 مرداد 1390, 03:29 صبح
سلام دوست عزیز .
خیلی راحت می تونید با یه همچین دستوراتی بهش دسترسی داشته باشید :

برای DataList :

اینا رو مثلا توی DataList1_ItemDataBound بنویسید :



((Button)e.Item.FindControl("buttonname")).Visible=false;





برای GridView :

در GridView1_RowDataBound :



((Button)e.Row.Cells[4].Controls[0]).Visible=False;




یا اینکه اونم FindControl بزنید .

:چشمک:

baha_film
پنج شنبه 20 مرداد 1390, 12:31 عصر
hjran abdpor (http://barnamenevis.org/member.php?60488-hjran-abdpor) عزيز ممون از توجهت ولي اين كد شما error ميده كه منم اونو attach كردم.لطفا بهم بگيد اشكال چيه.جون اين كد شما رو قبلا هم ديدم و ميخوام استفاده اون رو هم ياد بگيرم و اينكه اصلا تو كدوم Event بايد ازش استفاده كنم
از اقاي afshunmu هم ممنونم ، چون اون كدي كه گفتن با FindControl كاملا به كارم اومد

73650

hjran abdpor
جمعه 21 مرداد 1390, 00:53 صبح
با سلام.
تو رویداد GridView_SelectedIndexChanged
بنویسید .

baha_film
جمعه 21 مرداد 1390, 03:37 صبح
hjran abdpor عزيز ممنون از جوابتون
ولي هنوز يه مشكلي هست.يه جور ديكه از همين مسئله:
من يه GridView دارم كه داخلش يه Label گذاشتم و اين label به بانك Bind شده و قراره خلاصه اي از قسمت اول مشروح اخبار رو نشون بده و براي همين بايد تعداد كاراكترها به يه عدد مشخص محدود بشن و در آخر هم يه ... گذاشته بشه تا كاربر با كليك روي خبر تو يه صفحه ديگه كل خبر رو ببينه.
دستور محدود كردن Label به قول دوستان اينه:
Label1.Text=Label1.Text.Substring(0,100);
حالا نميتونم اينو تو GridView پياده كنم و نميدونم اصلا اينو بايد تو كدوم Event بنويسم.
البته يادآوري كنم كه ديتا تو Label ، با Load صفحه قرار ميگيره.يعني Eval() ست شده و منم ميخوام تو همون load اول SubString ست بشه.
ممنون ميشم در اين مورد هم كمكم كني.
اضافه بر اين هم لطفا راهنمايي كنيد چطور ميتونم اين دسترسي به كنترل ها رو ياد بگيرم.چون روشهاي زيادي هست و من هم هيچ وقت نتونستم به كنترل هاي توي GridView تو حالات مختلف دسترسي پيدا كنم.
بازم ممنون

b.paseban
جمعه 21 مرداد 1390, 03:58 صبح
سلام بر شما.
با استفاده از DataBound گرید میتونید اینکار رو انجام بدید به صورت زیر:


protected void GridView_DataBound(object sender, EventArgs e)
{
GridView gridview = (GridView)sender;
foreach (GridViewRow item in gridview.Rows)
{
Label lblID= (Label)item.FindControl("lblID");
lblID.Text=lblID.Text.Substring(0,100);
}
}

توی این کد ما میایم کل گرید ویو رو سطر به سطر میگردیم دنبال اون Label مورد نظر و مقدار اون رو تغییر میدیم.

baha_film
جمعه 21 مرداد 1390, 04:37 صبح
b.paseban (http://barnamenevis.org/member.php?122455-b.paseban) عزيز من اينو امتحان كردم ولي Error اي ميده مبني بر Index OutOfRenge كه ضميمه كردم
لطفا بررسي كنيد
73684

moslem.hady
جمعه 21 مرداد 1390, 10:30 صبح
b.paseban (http://barnamenevis.org/member.php?122455-b.paseban) عزيز من اينو امتحان كردم ولي Error اي ميده مبني بر Index OutOfRenge كه ضميمه كردم
لطفا بررسي كنيد
73684
این خطا به خاطر کمتر بودن تعداد کاراکتر ها از تعدادیه که نوشتین مثلا 100.
میتونین از این مقاله استفاده کنید:
http://programmer.persianblog.ir/post/22

baha_film
شنبه 22 مرداد 1390, 12:01 عصر
moslem.hady جان ممنون از كدت كار هم ميكنه ولي من هنوز فكر كنم با Eventاي كه بايد توش اينو بنويسم مشكل دارم.تو PreRender نوشتم كار كرد ولي وقتي تو RowDataBound مينويسم نميتونه Labelرو پيدا كنه و خطاي Object reference not set to an instance of an object ميده.
الان مشكل اينه:
1- نميتونم تمام سطرهاي GridView رو با اين كد پوشش بدم چون از اين كد استفاده ميكنم:

Label Lbl = (Label)GridView1.Rows[0].FindControl("LblMainNews");
Lbl.Text = SubString(Lbl.Text.ToString(), 3);

وميدونم دليلش Rows[0]است ولي نميدونم به جاي 0 چي بنويسم

2- اگه تو RowDataBound بنويسم بايد چطور انجام بشه.من اينو نوشتم كه جواب نداد و خطاي بالا رو ميداد:

Label Lbl = (Label)e.Row.FindControl("LblMainNews");
Lbl.Text = SubString(Lbl.Text.ToString(), 3);


------قابل توجه دوستان تابع SubString اينه:

public string SubString(object Text, object Length)
{
string StringText = Text.ToString();
int StringLenght = int.Parse(Length.ToString());
if (StringText.Length >= StringLenght)
{
return StringText.Substring(0, StringLenght) + "... ";
}
else
{
return StringText;
}
}

moslem.hady
شنبه 22 مرداد 1390, 12:58 عصر
دوست گرامی. تو میخوای فقط یه قسمت از متن نشون داده بشه. درسته؟؟
برای اینکار فقط کافیه توی قسمت کد تابع substring رو داشته باشی. که داری!
لازم نیست با کد دیگه ای مقدار لیبل رو عوض کنی. منظورم اینه:
Label Lbl = (Label)GridView1.Rows[0].FindControl("LblMainNews");
Lbl.Text = SubString(Lbl.Text.ToString(), 3);
فقط کافیه لیبل رو اینطوری مقدار بدی:
Text='<%# SubString(Eval("title", 10)) %>

اون کد هایی که خودت نوشتی رو، اگه میخوای ازشون استفاده کنی باید تو RowDataBound گریدویو بنویسی. برای رفع ارو این خط کد رو اول تابع RowDataBound بنویس:

if (e.Row.DataItem == null)
return;

baha_film
شنبه 22 مرداد 1390, 20:20 عصر
ممنون راه حل شما مشكلمو حل كرد.من به اين فكر بودم كه كنترل رو بعد از بايند شدن كنترل كنم ، ديگه به اين فكر نكرده بودم .
البته يه كوچولو بايد عوض بشه

Text='<%# SubString(Eval("NewBody"),10)+"..." %>

بازم ممنون