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="编辑  产品图片  删除" 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);
}
}
}
我已经看了很长很长时间了,希望大家帮帮我,老总催的很急。。
显示都没有问题,但是点击相应的三个按钮中的任一个,都会出现如下错误:异常详细信息: 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="编辑  产品图片  删除" 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);
}
}
}
我已经看了很长很长时间了,希望大家帮帮我,老总催的很急。。
帮你up
其中的删除就是
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)
换成你说的int productId = Int32.Parse(e.Item.Cells[4].Text);
还是错
埃,因为三个imagebutton都用到了productId,所以我一直怀疑是这个的问题,可是改了好多次,还是不行啊。
upup!!!
http://dev.csdn.net/article/63/63892.shtm
2。 如果你的productId 根本不在列中,那么可以用DataKeyField拿回来,这个你应该知道吧。
也可以这样
DataRowView dr = (DataRowView)e.Item.DataItem;
int productId = Convert.ToInt32(dr["productId"]);