datagrid中的模板列使用了三个<asp:imagebutton>功能是删除,编辑和显示数据库中的相应的图片,都使用了OnCommandName属性,分别是  delete  edit view,
显示都没有问题,但是点击相应的三个按钮中的任一个,都会出现如下错误:异常详细信息: System.FormatException: 输入字符串的格式不正确。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: [FormatException: 输入字符串的格式不正确。]
   System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +0
   zjnbline_eng.Manage.ProductManage.DataGrid_Click(Object Sender, DataGridCommandEventArgs e) +86
   System.Web.UI.WebControls.DataGrid.OnItemCommand(DataGridCommandEventArgs e) +110
   System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e) +68
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
   System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e) +100
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
   System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e) +120
   System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +129
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1273我看了很长时间了,都不知道问题出在那里?相关代码如下:前台:
<asp:datagrid id="myDataGrid" DataKeyField="ProductId" BorderWidth="0" runat="server" width="90%"
OnItemCommand="DataGrid_Click" AutoGenerateColumns="false" EnableViewState="false">
<Columns>
<asp:TemplateColumn HeaderText="编辑&nbsp;&nbsp产品图片&nbsp;&nbsp删除" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Cssclass="SubHead" ItemStyle-Width="40%" ItemStyle-HorizontalAlign="center">
<ItemTemplate>
<table>
<tr>
<td width="25%" align=left valign=middle>
<asp:ImageButton ImageUrl="../webimages/edit.gif" CommandName="edit"  AlternateText="编辑此产品" runat="server" ID="Imagebutton1" />
</td>
<td  width="50%" align=center valign=middle>
<asp:ImageButton ImageUrl='<%# DataBinder.Eval(Container.DataItem, "ProductImg","../ProductImg/{0}") %>' CommandName="view" width="80" height="50" BorderWidth="0" AlternateText='点击查看产品详情……' runat="server" ID="Imagebutton3" />
</td>
<td width="25%" align=right valign=middle>
<asp:ImageButton ImageUrl="../webimages/delete.gif" CommandName="delete" AlternateText="删除此产品" runat="server" ID="Imagebutton2" />
</td>
</tr></table>
</ItemTemplate>
</asp:TemplateColumn>
//几个asp:BoundColumn 
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id="CheckDisplay" Runat=server Checked='<%# System.Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "DisplayOnIndex")) %>' />
<input type="hidden" id="SelectedID" runat="server" value='<%# Container.ItemIndex%>'  NAME="SelectedID"/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>后台相关代码如下:
protected void DataGrid_Click(object Sender, DataGridCommandEventArgs e) 
 {
 String command = ((ImageButton)e.CommandSource).CommandName;
 myDataGrid.SelectedIndex = e.Item.ItemIndex;
 int productId = Int32.Parse("myDataGrid.SelectedItem.Cells[4].Text");
   if (command == "delete") 
{..}
   else 
               {
if(command == "view")
{
Response.Redirect("../Products/ProductsDetail.aspx?ProductID=" + productId);
}
else
{ Response.Redirect("EditProduct.aspx?ProductID=" + productId);
}
}
}
我已经看了很长很长时间了,希望大家帮帮我,老总催的很急。。

解决方案 »

  1.   

    private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
      

  2.   

    后台代码不是放在datagrid_click事件中的,就像楼上说的,
    帮你up
      

  3.   

    http://dev.csdn.net/article/63/63892.shtm
    其中的删除就是
      

  4.   

    晕倒!
    DataGrid_Click 只是一个名字而已,当然可以用, 干嘛说这个错了! 
    错误在:
    int productId = Int32.Parse("myDataGrid.SelectedItem.Cells[4].Text");你要把那么长的一段字符转成int,怎么可能!!
    你这行写的错多了!
    SelectedItem不一定可以。
    不过这样肯定可以:
    int productId = Int32.Parse(e.Item.Cells[4].Text); 只要你的第5列有绑定,就肯定行!都告诉你错误了,这么清楚的错误!!!
    System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
      

  5.   

    那个字符串的是我修改过的,没有加""之前也是一样的错误,完全的一样,我也很晕,所以就乱改了一下,就是int productId = Int32.Parse(myDataGrid.SelectedItem.Cells[4].Text);也是错
    换成你说的int productId = Int32.Parse(e.Item.Cells[4].Text);
    还是错
    埃,因为三个imagebutton都用到了productId,所以我一直怀疑是这个的问题,可是改了好多次,还是不行啊。
    upup!!!
      

  6.   

    自己跟踪调试看看 e.Item.Cells[4].Text 的值是什么
      

  7.   

    private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
      

  8.   

    刚才细看了你前台代码,完全不对,好好看看别人的例子吧
    http://dev.csdn.net/article/63/63892.shtm
      

  9.   

    为什么这么简单的问题搞那么久?1。 你的productId 是第几列? 这么重要的信息你都没有贴出来。
    2。 如果你的productId 根本不在列中,那么可以用DataKeyField拿回来,这个你应该知道吧。
    也可以这样
    DataRowView dr = (DataRowView)e.Item.DataItem;
    int productId = Convert.ToInt32(dr["productId"]);
      

  10.   

    恩,自己是头一次编写比较多的代码,以前上csdn主要还是看看新闻,诶,惭愧,念到硕士了,还是一个菜鸟(我以前不是计算机相关专业的),问题已经解决了,在列里加了关键键的一列,谢谢大家的帮忙,asp.net看了一个月了,还是没有什么感觉,再次感谢大家的帮助,谢谢!!