PDA

View Full Version : سوال: CommandButton در گريد چند صفحه اي



rana-writes
چهارشنبه 27 اردیبهشت 1391, 22:30 عصر
سلام
من در اين مورد خيلي سرچ كردم تو سايت ولي به جوابي نرسيدم
براي دسترسي به آيتمهاي توي گريد از اين استفاده ميكنم به CommandArumant اين مقدار رو ميدم

CommandArgument='<%#Container.DataItemIndex %>'

توي باتنهايي كه توي گريد گذاشتم، دسترسي به ستونهاي ديگه ي گريد رو هم نياز دارم كه خب اين حالت كارم رو راه ميدازه
منتهي وقتي گريد رو چند صفحه اي ميكنم، وقتي توي صفحه هاي ديگه ميره، ديگه اين كد كار نمي كنه و پيام
Index was out of range
رو بهم ميده
ممنون ميشم راهنماييم كنين كه بايد چكار كنم
كدهايي كه استفاده كردم رو ميذارم اينجا :



<asp:ImageButton ID="LbDel" runat="server" CommandArgument='<%#Container.DataItemIndex %>'
CommandName="DelBook" ImageUrl="~/admin/images/Delete.png"
ToolTip="حذف"
OnClientClick="return confirm('آیا برای حذف این کتاب مطمئن هستید؟');" />


اينم كد سي شارپم

GridViewRow row = (GridViewRow)((ImageButton)e.CommandSource).Naming Container;
int index = Int32.Parse((string)e.CommandArgument);
Label LblBookId = (Label)GridViewMngBook.Rows[index].Cells[4].FindControl("LblBookId");

if (e.CommandName == "DelBook")
{
Label LblPicName = (Label)GridViewMngBook.Rows[index].Cells[4].FindControl("LblPicName");
Label LblBookFile = (Label)GridViewMngBook.Rows[index].Cells[4].FindControl("LblBookFile");

File.Delete(Server.MapPath("~/BookFile" + "\\"+ LblPicName.Text));
File.Delete(Server.MapPath("~/BookFile" + "\\" + LblBookFile.Text));


int delrow = PublishDataAccess.DelBook(Convert.ToInt32(LblBookI d.Text));
GridViewMngBook.DataBind();
LBlError.Text = "کتاب با موفقیت حذف شد";
}

mo.esmp
پنج شنبه 28 اردیبهشت 1391, 12:48 عصر
این رو امتحان کنید
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
protected void GridView_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
if (e.CommandName == "Edit/Delete/Or whatever")
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
int itemId = Convert.ToInt32(NewsGridView.DataKeys[rowIndex].Value);
.
.
.
}
}

alonemm
پنج شنبه 28 اردیبهشت 1391, 13:53 عصر
سلام
من در اين مورد خيلي سرچ كردم تو سايت ولي به جوابي نرسيدم
براي دسترسي به آيتمهاي توي گريد از اين استفاده ميكنم به CommandArumant اين مقدار رو ميدم

CommandArgument='<%#Container.DataItemIndex %>'

توي باتنهايي كه توي گريد گذاشتم، دسترسي به ستونهاي ديگه ي گريد رو هم نياز دارم كه خب اين حالت كارم رو راه ميدازه
منتهي وقتي گريد رو چند صفحه اي ميكنم، وقتي توي صفحه هاي ديگه ميره، ديگه اين كد كار نمي كنه و پيام
Index was out of range
رو بهم ميده
ممنون ميشم راهنماييم كنين كه بايد چكار كنم
كدهايي كه استفاده كردم رو ميذارم اينجا :



<asp:ImageButton ID="LbDel" runat="server" CommandArgument='<%#Container.DataItemIndex %>'
CommandName="DelBook" ImageUrl="~/admin/images/Delete.png"
ToolTip="حذف"
OnClientClick="return confirm('آیا برای حذف این کتاب مطمئن هستید؟');" />


اينم كد سي شارپم

GridViewRow row = (GridViewRow)((ImageButton)e.CommandSource).Naming Container;
int index = Int32.Parse((string)e.CommandArgument);
Label LblBookId = (Label)GridViewMngBook.Rows[index].Cells[4].FindControl("LblBookId");

if (e.CommandName == "DelBook")
{
Label LblPicName = (Label)GridViewMngBook.Rows[index].Cells[4].FindControl("LblPicName");
Label LblBookFile = (Label)GridViewMngBook.Rows[index].Cells[4].FindControl("LblBookFile");

File.Delete(Server.MapPath("~/BookFile" + "\\"+ LblPicName.Text));
File.Delete(Server.MapPath("~/BookFile" + "\\" + LblBookFile.Text));


int delrow = PublishDataAccess.DelBook(Convert.ToInt32(LblBookI d.Text));
GridViewMngBook.DataBind();
LBlError.Text = "کتاب با موفقیت حذف شد";
}


باسلام:

شما میتونید فیلد ID رو در CommandArgument جای گزاری کنید و سعی کنید گرید رو هم به صورت دستی صفحه بندی کنید دیگه چنین مشکلی بوجود نمیاد.

rana-writes
پنج شنبه 28 اردیبهشت 1391, 14:26 عصر
باسلام:

شما میتونید فیلد ID رو در CommandArgument جای گزاری کنید و سعی کنید گرید رو هم به صورت دستی صفحه بندی کنید دیگه چنین مشکلی بوجود نمیاد.

ممنون از پاسختون
اتفاقا روي همين شك كرده بودم، اگه با اون شيوه صفحه بندي اي كه شما نوشته بودين كارم رو انجام بدم، باز هم ميتونم از همين استفاده كنم؟ CommandArgument='<%#Container.DataItemIndex %>'

alonemm
پنج شنبه 28 اردیبهشت 1391, 15:07 عصر
ممنون از پاسختون
اتفاقا روي همين شك كرده بودم، اگه با اون شيوه صفحه بندي اي كه شما نوشته بودين كارم رو انجام بدم، باز هم ميتونم از همين استفاده كنم؟ CommandArgument='<%#Container.DataItemIndex %>'

اگر از روشی که در تاپیک زیر آموزش دادم در مورد صفحه بندی گرید استفاده میکنید میتونید یک فیلد ID داشته باشید که به CommandArgument بدید.
http://barnamenevis.org/showthread.php?322558-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-Custom-Paging-%D8%AF%D8%B1-GridView-%D8%A8%D8%A7-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-Ajax

موفق باشید.