2011-05-02 89 views
0

我有一个ImageButton控件作为GridView控件的一部分,该控件显示为ItemTemplate并位于同一个GridView中。我要我加了一些这样的代码在gridview中为imageButton添加功能

if (e.CommandName == "addToSession") 
{ 
    int index = Convert.ToInt32(e.CommandArgument); 

    GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index]; 

    string ISBN = selectedRow.Cells[0].Text; 
    string bookTitle = selectedRow.Cells[1].Text; 
    string image = selectedRow.Cells[2].Text; 

    //storing title, author, pictureUrl into session variables to 'carry them over' to RateBook.aspx 
    Service s = new Service(); 
    Session["ISBN"] = ISBN; 
    Session["bookTitle"] = bookTitle; 
    Session["ImageUrl"] = s.returnImageUrl(bookTitle); 

    if (Session["userName"] == null) 
    { 
     Response.Redirect("registerPage.aspx"); 
    } 
    else 
    { 
     Response.Redirect("RateBook.aspx"); 
    } 
} 
else if (e.CommandName == "ratedBooks") 
{ 
    int index = Convert.ToInt32(e.CommandArgument); 

    GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index]; 

    string bookTitle = selectedRow.Cells[1].Text; 

    Service s = new Service(); 

    Session["ImageUrl"] = s.returnImageUrl(bookTitle); 

    Response.Redirect("BookRated.aspx"); 
} 

当我运行这段代码我得到一个格式异常和我又是不知道为什么一个普通Button控件。我已经改变了一下图像按钮,并将图像嵌入链接按钮,似乎更正确。

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:LinkButton ID="LinkButton1" runat="server" CommandName="ratedBooks"> 
      <asp:Image ID="ImageButton1" ImageUrl='<%#Eval("pictureUrl") %>' runat="server" /> 

     </asp:LinkButton>  
    </ItemTemplate> 
</asp:TemplateField> 

请指教。

问候,

阿里安

+0

@marco:在GridView的TemplateField的ItemTemplate的情况下,你绝对可以有'的eval()'语句。 – kbrimington 2011-05-02 17:38:03

+0

嗨...我删除我的第一个评论... tks的建议! – marcoaoteixeira 2011-05-02 17:46:07

回答

1

我相信你可以用ImageButton完成你的需求,因为它支持所有主要的Button功能,包括CommandName(见http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.imagebutton.commandname.aspx)。

尝试了这一点:

<asp:ImageButton ID="LinkButton1" runat="server" 
        CommandName="ratedBooks" 
        ImageUrl='<%#Eval("pictureUrl") %>' /> 

另外请注意,您的格式异常可能从读线现身:

Convert.ToInt32(e.CommandArgument); 

原因是,有从这个代码片段似乎是没有赋值给按钮的CommandArgument的值。 Convert.ToInt32需要传入一个有效的整数值,这意味着ImageButton需要有一个绑定到它的CommandArgument属性的号码。

如果您基于此MSDN参考(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewcommandeventargs.aspx)的解决方案,请注意<asp:ButtonField>列类型获得特殊待遇; CommandArgument设置为行索引。当您使用模板字段时,ASP.NET需要您指定或绑定您自己的命令参数。

更新

这个问题包含在网格视图行的索引绑定到自定义按钮的详细信息:

ASP.NET GridView RowIndex As CommandArgument

+0

感谢您的建议 – Arianule 2011-05-02 18:20:46

1

一个可能的解决方案是添加ItemDataBound事件处理程序和搜索图像按钮改变自己的形象网址。

MyGrid.RowDataBound += new RepeaterItemEventHandler(MyGrid_RowDataBound); 

void MyGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowIndex > -1) 
     { 
      ImageButton image = e.Row.FindControl("MY_IMAGE_CONTROL") as ImageButton; 

      image.ImageUrl = "PATH_TO_IMAGE"; 
     } 
    } 

希望它有帮助。

0

你需要CommandArgument背后C#

<asp:TemplateField ShowHeader="False"> 
<ItemTemplate> 
    <asp:ImageButton ID="ImageButton1" runat="server" CommandName="Delete" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"                    ImageUrl="~/Modelos/Img/deleted.gif" /> 
</ItemTemplate> 
</asp:TemplateField> 

代码

public void GridView_RowCommand(Object sender, GridViewCommandEventArgs e) 
     { 
      string t; 
      if (e.CommandName == "Delete") 
      { 
       int index = Convert.ToInt32(e.CommandArgument); 
       GridViewRow selectedRow = grid1.Rows[index]; 
       t = selectedRow.Cells[2].Text; 
      } 
     } 

在ASPX

<asp:GridView ID="grid1" runat="server" onselectedindexchanged="GridView1_SelectedIndexChanged" ...