我正在尝试在webform应用中更新gridview中的一行,我收到格式异常。我的其他存储过程正在运行,我已根据此代码检查了这些,但无法找到此失败的位置。应用程序中的所有其他内容都在运行
感谢任何帮助,谢谢。
我的存储过程。
CREATE PROCEDURE UpdateProd
@pId int, @catId int,
@pname varchar(15),
@pdesc1 varchar(25), @pdesc2 varchar(50),
@pprice dec(8,2)
AS
UPDATE Prod
SET CatID = @catId,
PName = @pname,
PDesc1 = @pdesc1,
PDesc2 = @pdesc2,
Price = @pprice
WHERE ProdId = @pId;
GO
我的数据绑定等用于更新。
public static void UpdateProduct(string[] param1)
{
// SqlConnection.
SqlConnection con = new SqlConnection(conString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "UpdateProd";
cmd.Parameters.Add("@pId", SqlDbType.Int).Value = param1[0];
cmd.Parameters.Add("@catId", SqlDbType.Int).Value = param1[1];
cmd.Parameters.Add("@pname", SqlDbType.VarChar).Value = param1[2];
cmd.Parameters.Add("@pdesc1", SqlDbType.VarChar).Value = param1[3];
cmd.Parameters.Add("@pdesc2", SqlDbType.VarChar).Value = param1[4];
cmd.Parameters.Add("@pprice", SqlDbType.Decimal).Value = param1[5];
// etc .../
我更新行的方法。
protected void GVProducts_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GVProducts.Rows[e.RowIndex];
string[] param = { row.Cells[1].Text.ToString(), row.Cells[2].Text.ToString(),
row.Cells[3].Text.ToString(), row.Cells[4].Text.ToString(), row.Cells[5].Text.ToString(),
row.Cells[6].Text.ToString() };
Login.UpdateProduct(param);
}
我对GridView列的标记
<Columns>
<asp:BoundField DataField="ProdID" HeaderText="ID" InsertVisible="False" ReadOnly="True"
SortExpression="ProdID" />
<asp:BoundField DataField="CatID" HeaderText="Cat" SortExpression="CatID" />
<asp:BoundField DataField="PName" HeaderText="Product Name" SortExpression="PName" />
<asp:BoundField DataField="PDesc1" HeaderText="Short Product Description" SortExpression="PDesc1" />
<asp:BoundField DataField="PDesc2" HeaderText="Long Product Description" SortExpression="PDesc2" />
<asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
</Columns>
我得到了
System.FormatException
我正在启动行单元格的索引为1,这在选择prodId进行删除时有效。我假设第一列(索引0)被[编辑/选择]占用。我已经测试了在两个方向上改变指数,这没有帮助。
修改
实际行只显示Cells索引= 1.较大的索引会抛出超出范围的异常。所以这很奇怪。在设置gridview时,有什么我需要知道的吗,重新单元?
答案 0 :(得分:2)
我要做的第一件事就是停止构建并传递一个字符串数组。相反,我会传递每个参数。它更容易编码,更容易调试,消除了很多歧义。您还可以指定数据类型,这可能是此处的问题。你传入字符串,然后希望它们可以隐式地转换为int。非主题但我也建议在USING中包装您的连接。