PDA

View Full Version : غیر فعال کردن یک دکمه در گرید در صورت نال بودن یک فیلد جدول



sg.programmer
سه شنبه 20 دی 1390, 10:33 صبح
سلام
چطوری میشه یک دکمه را در صورت خالی یا نال بودن فیلد آن در جدول آنرا غیر فعال یا مخفی کرد

hamid_shrk
سه شنبه 20 دی 1390, 10:37 صبح
با سلام .

protected void gridview1_DataBound(object sender, EventArgs e)
{
try
{

for (int i = 0; i < gridview1.Rows.Count; i++)
{
if (gridview1.Rows[i].Cells[5].Text == "&nbsp;")
{
gridview1.Rows[i].Cells[5].Text = "ندارد";
}
else
{
gridview1.Rows[i].Cells[5].Text = "دارد";
}
}


}
catch (Exception er)
{
return;
}
}

sg.programmer
سه شنبه 20 دی 1390, 11:47 صبح
تشکر
ولی من از TemplateField استفاده میکنم چطور باید به Cell ها دسترس داشت در اینجا که ItemTemplate هست

hamid_shrk
سه شنبه 20 دی 1390, 11:49 صبح
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/Image/Icons/Download.png" /></ItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="40px" />
</asp:TemplateField>

sg.programmer
سه شنبه 20 دی 1390, 12:46 عصر
منظورم اینه که در تمپایت چطوری متوجه میشه که Cells[5] به f5 اشاره میکند چون گرید نظم خاصی ندارد


<asp:SqlDataSource ID="SqlDataSource1" runat="server"
SelectCommand="SELECT fild1,f2,f3,f4,f5,f6 FROM tbl"/>


وهمچنین در gridview1_DataBound به دکمه دسترسی ندارم برای خیر فعال کردن یا تغییر text اون

hamid_shrk
سه شنبه 20 دی 1390, 13:08 عصر
خوب مگه sqldatasource رو به گریدت بایند نکردی؟/ستونهات رو به فیلد هات باید بایند کنی دیگه .


وهمچنین در gridview1_DataBound به دکمه دسترسی ندارم برای خیر فعال کردن یا تغییر text اون

چرا دسترسی نداری؟کافیه شماره ستونش رو بذاری تو cells[] تا بتونی متن بهش بدی یا حتی visible رو false کنی

reza4359
سه شنبه 20 دی 1390, 14:17 عصر
سلام دوست عزیز حالا من میخوام به جای مقدار دادن به سلول درصورت خالی بودن باتونی (button) که برای ویرایش گذاشتم رو غیر فعال کنم حالا چطوری این کارو بکنم؟

hamid_shrk
سه شنبه 20 دی 1390, 14:28 عصر
سلام دوست عزیز حالا من میخوام به جای مقدار دادن به سلول درصورت خالی بودن باتونی (button) که برای ویرایش گذاشتم رو غیر فعال کنم حالا چطوری این کارو بکنم؟
منظورتون از غیر فعال چیه؟
enable='false' ؟؟

reza4359
سه شنبه 20 دی 1390, 14:44 عصر
آره دقیقا همین
باید چکار کنم؟

sg.programmer
سه شنبه 20 دی 1390, 14:55 عصر
خوب مگه sqldatasource رو به گریدت بایند نکردی؟/ستونهات رو به فیلد هات باید بایند کنی دیگه .

تشکر ببحشید که وقتتون را گرفتم -من اینطوری مقدار دهی میکنم
در ضمن در gridview1_DataBound به text یا دیگر خصیصه های LinkButton2 دسترسی داشته باشم
LinkButton2 .text="ندارد";



<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="Pro_ID" DataSourceID="SqlDataSource1" AllowPaging="True"
PageSize="10" ondatabound="GridView1_DataBound">
<PagerSettings Mode="NumericFirstLast" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a class="shadow-290" href="portfolio.aspx" title=""><img src="Products/portfolio-lime-small.jpg" alt="" /><%# Eval("Grp_ID") %></a>
<p class="desc"><%# Eval("Pro_Desc")%></p>

<asp:LinkButton ID="LinkButton2" class="button-read" runat="server"
CommandArgument='<%# Eval("Pro_FileName") %>' oncommand="LinkButton2_Command"><span>دانلود کاتالوگ</span></asp:LinkButton>

</ItemTemplate>
</asp:TemplateField>

</Columns>
<PagerStyle HorizontalAlign="Center" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:DB_ConnectionString %>"
SelectCommand="SELECT * FROM [tbl_Product]"></asp:SqlDataSource>

hamid_shrk
سه شنبه 20 دی 1390, 14:58 عصر
این کد رو بنویسید غیر فعالش میکمه :

gridview1.Rows[i].Cells[7].Enabled=false;

reza4359
سه شنبه 20 دی 1390, 15:41 عصر
این کد رو بنویسید غیر فعالش میکمه :

gridview1.Rows[i].Cells[7].Enabled=false;

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

sg.programmer
سه شنبه 20 دی 1390, 17:42 عصر
کد زیر را نوشتم هم برای GridView1_DataBound و هم GridView1_DataBinding ولی فقط برای یک سطر کار میکنه



try
{
for (int i = 0; i < GridView1.Rows.Count; i++)
{


GridView1.Rows[i].Cells[0].Enabled = false;
GridView1.Rows[i].Cells[1].Enabled = false;
GridView1.Rows[i].Cells[2].Enabled = false;
GridView1.Rows[i].Cells[3].Enabled = false;
GridView1.Rows[i].Cells[4].Enabled = false;
GridView1.Rows[i].Cells[5].Enabled = false;
GridView1.Rows[i].Cells[6].Enabled = false;

}
}
catch (Exception er)
{
return;
}

در ضمن چطور بفهمم که Cells[*****] کدوم به button اشاره میکنه چون اگه کد بالا را فقط از یکی استفاده میکردم تاثیر نداشت


gridview1.Rows[i].Cells[*****].Enabled=false;


تک تک i را میگزاشتم تاثیری نداشت

hamid_shrk
سه شنبه 20 دی 1390, 17:47 عصر
cells همون ستونتون هست دیگه.
خوب شما کلا یک ستون دارید.بنده خدا اولی رو میخونه بعدیش چون ارور داره از try در میاد.
این درستشه :

for (int i = 0; i < GridView1.Rows.Count; i++) {


GridView1.Rows[i].Cells[0].Enabled = false;


}

reza4359
سه شنبه 20 دی 1390, 18:38 عصر
دوستان کسی نیست بگه باید چه کار کنم؟

meisam3322
سه شنبه 20 دی 1390, 19:16 عصر
از FindControl استفاده کن

reza4359
سه شنبه 20 دی 1390, 19:42 عصر
ممنونم ولی میشه بگید چطوری ؟
چطوری به خاصیت visable باتون ویرایش دسترسی پیدا کنم؟
در ضمن من از template استفاده نمیکنم

sg.programmer
چهارشنبه 21 دی 1390, 00:33 صبح
cells همون ستونتون هست دیگه.
خوب شما کلا یک ستون دارید.بنده خدا اولی رو میخونه بعدیش چون ارور داره از try در میاد.
این درستشه :

for (int i = 0; i < GridView1.Rows.Count; i++) {


GridView1.Rows[i].Cells[0].Enabled = false;


}


تشکر حمید جان - من Cell را با فیلد اشتباه گرفتم
من از تمپلیت دارم استفاده میکنم پس یک Cell خواهد بود.
بعد من از 2 کنترل LinkButton و 3 تگ p دارم استفاده میکنم
خوب میخوام وقتی فیلد Pro_FileDonwload برای نال بود لینک باتن غیر فعال شه یا visible=false شه
مثلا 5 فیلد دارم که یکی از فیلد ها هم Pro_FileDonwload هست

if (Pro_FileDonwload ==Null) then
LinkButton =false

sg.programmer
چهارشنبه 21 دی 1390, 00:35 صبح
از FindControl استفاده کن

سلام
چطور چک کنم که فیلدم برابر null و چطور link button را بعدش غیر فعال و در کجا از کد استفاده کنم؟

hamid_shrk
چهارشنبه 21 دی 1390, 09:18 صبح
برادرم linkbutton هم میشه یکی از ستون هات پس با cells[] پیداش کن و غیر فعالش کن.
او یکی از پستای همین تاپیک به آقا رضا گفتم