PDA

View Full Version : مبتدی: امکان حذف چندین سطر از gridview



panahinia
شنبه 15 اسفند 1394, 05:49 صبح
سلام و خسته نباشید

یه Gridview تو صفحه گذاشتم و می خوام امکان انتخاب چندین سطر و حذف اونها رو داشته باشه
139433

یعنی بعد از این که تیک چک باکس ها رو زد و بر روی دکمه ی حذف کلیک کرد سطرها حذف بشود ، برای حذف هر سطر در داخل rowcommand گریدویو به این صورت نوشتم که درست کار میکنه :

Int32 index = Int32.Parse((string)e.CommandArgument);
DeleteCat("id='" + Grcat.DataKeys[index].Values[0]+ "'");

میخوام امکان حذف چند سطر رو بعد از کلیک بر روی دکمه ی حذف داشته باشه ، لطفا راهنمایی بفرمایید

rezashaban
شنبه 15 اسفند 1394, 05:52 صبح
سلام دوست من
میتونی روی گریدویو یه foreach بزنی و بعد برای هرسطر اون چک باکس رو با تابع FindControl پبدا کنی و چک کنی ببینی اگه تیک خورده اون سطر رو حذق کنی

rezashaban
شنبه 15 اسفند 1394, 05:55 صبح
سلام دوست من
میتونی روی گریدویو یه foreach بزنی و بعد برای هرسطر اون چک باکس رو با تابع FindControl پبدا کنی و چک کنی ببینی اگه تیک خورده اون سطر رو حذق کنی
کدش به این صورت میشه:


foreach(GridViewRow row inGridView1.Rows){
if(row.RowType==DataControlRowType.DataRow){
HyperLink myHyperLink = row.FindControl("myHyperLinkID")asHyperLink;
}
}
این کد رو برای خودت ویزایش کن

panahinia
شنبه 15 اسفند 1394, 09:20 صبح
کدش به این صورت میشه:


foreach(GridViewRow row inGridView1.Rows){
if(row.RowType==DataControlRowType.DataRow){
HyperLink myHyperLink = row.FindControl("myHyperLinkID")asHyperLink;
}
}
این کد رو برای خودت ویزایش کن


__________________________________________________ _______________________________

ممنون از شما ، خیلی لطف کردید

panahinia
شنبه 15 اسفند 1394, 09:39 صبح
کدش رو باید داخل رویداد کلیک دکمه بنویسم ؟ خطا میده
foreach(GridViewRow row in Grcat.Rows )
{

if (row.RowType == DataControlRowType.DataRow)
{
CheckBox cbx = row.FindControl("cbxselect") as CheckBox ;

Int32 index = Int32.Parse((string)e.CommandArgument);
ClassLibrary.Pages objpage = new ClassLibrary.Pages();
objpage.DeleteCat("id='" + Grcat.DataKeys[index].Values[0] + "'");
WebTools.FillGridCat(Grcat);

}
}

rezashaban
شنبه 15 اسفند 1394, 11:36 صبح
آره باید توی همون رویداد بنویسی(کلیک دکمه حذف):
کد رو اشتباه نوشتی بیشتر دقت کن:
1. شرطی که بررسی کنه چک باکس تیک خورده رو نذاشتی
2. اینجا دیگه commandArgument رو نداری
3. باید اون آیدی رو توی hiddenField بذاری بعد اگه چک باکس تیک خورده باشه مقدار اون hiddenfield رو بفرستی به بانگ و حذفش کنی

panahinia
شنبه 15 اسفند 1394, 12:35 عصر
اینجوری نوشتم ولی بازم خطا میده

foreach (GridViewRow row in Grcat.Rows)
{
CheckBox cbxdel = row.FindControl("cbxselect") as CheckBox ;

//if (row.RowType == DataControlRowType.DataRow)
//{ }
if (cbxdel.Checked)
{

// int index = Convert.ToInt32(Grcat.DataKeys[row.RowIndex].Value);

ClassLibrary.Pages objpage = new ClassLibrary.Pages();
HiddenField id = row.FindControl("id") as HiddenField;
objpage.DeleteCat("id='" + id.Value + "'");

WebTools.FillGridCat(Grcat);
}
}

rezashaban
شنبه 15 اسفند 1394, 12:36 عصر
متن خطا رو بذار؟

panahinia
شنبه 15 اسفند 1394, 12:53 عصر
ببخشید خطا نمیده فقط کار نمیکنه ، id انتخاب شد ه رو تشخیص نمیده

rezashaban
شنبه 15 اسفند 1394, 12:54 عصر
توی کدت دقت کن یجای کار رو داری اشتباه میری؛ برنامه رو خط به خط اجرا کن ببین کجا ایراد داره

panahinia
شنبه 15 اسفند 1394, 13:00 عصر
خطا نمیده خط به خط اجرا کردم ، خطای منطقی داره ، به این صورت نوشتم

foreach (GridViewRow row in Grcat.Rows)
{
CheckBox cbxdel = row.FindControl("cbxselect") as CheckBox ;

//if (row.RowType == DataControlRowType.DataRow)
//{ }
if (cbxdel.Checked)
{

// int index = Convert.ToInt32(Grcat.DataKeys[row.RowIndex].Value);

ClassLibrary.Pages objpage = new ClassLibrary.Pages();
HiddenField id = row.FindControl("id") as HiddenField;
objpage.DeleteCat("id='" + id.Value + "'");

WebTools.FillGridCat(Grcat);
}
}

rezashaban
شنبه 15 اسفند 1394, 13:44 عصر
سلام
اون کنترل hiddenfield رو توی گریدویو با همون اسم id گذاشتی؟
مقدار id رو هم توش ذخیره کردی؟
کنترلش رو پیدا نمیکنه یا مقدارش رو نمیگیره؟

panahinia
شنبه 15 اسفند 1394, 14:21 عصر
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="id" Visible="False" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="id" HeaderText="ردیف"
ShowHeader="False" Visible="False" />



<asp:TemplateField>

مقدارش رو نمی گیره

rezashaban
شنبه 15 اسفند 1394, 14:29 عصر
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="id" Visible="False" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="id" HeaderText="ردیف"
ShowHeader="False" Visible="False" />



<asp:TemplateField>

مقدارش رو نمی گیره
HiddenField که گذاشتی کلا دیده نمیشه و نیازی به اینکه Visible رو False کنی نیست؛ به خاطر اینکه Visible رو False کردی مقدارش رو نمیگیره

panahinia
شنبه 15 اسفند 1394, 14:41 عصر
true گذاشتم مقدارش رو بازم درست نشد .

rezashaban
شنبه 15 اسفند 1394, 14:50 عصر
true گذاشتم مقدارش رو بازم درست نشد .
کلا اون خصوصیت Visible رو حذف کن و روی بقیه کنترل های سطرت تست کن اگه کار کرد این hiddenfield رو هم مثل همون کنترل های تظیم کن، چه از لحاظ موضعیتی و چه از لحاظ تنظیمات خود کنترل

panahinia
شنبه 15 اسفند 1394, 15:13 عصر
:ناراحت: درست نشد ، دست شما درد نکنه ،ببخشید وقت شما رو هم گرفتم

bitasoft.ir
شنبه 15 اسفند 1394, 15:43 عصر
سلام. مقدار DataKeyNames رو تخصیص بدین به فیلد ID

panahinia
شنبه 15 اسفند 1394, 16:26 عصر
دوستان به این صورت درست شد ، دستتون درد نکنه
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="id" runat="server" Value='<%# Eval("id") %>' />
</ItemTemplate>
</asp:TemplateField>