更新行单元格抛出范围异常

Updating row cells throwing out of range exception

我正在尝试更新网络表单应用程序中网格视图中的一行,但出现格式异常。我的其他存储过程正在运行,我已经根据此代码检查了这些存储过程,但找不到这个失败的地方。应用程序中的所有其他功能均正常运行。

感谢任何帮助,谢谢。

我的存储过程。

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)被 [edit/select] 占用。我已经测试过在两个方向上更改索引,但这没有帮助。


编辑

实际行仅显示 Cells 索引 = 1。较大的索引抛出超出范围的异常。所以这很好奇。设置 gridview、re Cells 时有什么我需要知道的吗?

我要做的第一件事是停止构建和传递字符串数组。相反,我会传递每个参数。它更容易编码,更容易调试,并消除了很多歧义。您还可以指定数据类型,这可能是这里的问题。您正在传递字符串,然后希望它们可以隐式转换为 int。题外话,但我也建议将您的连接包装在 USING 中。