Gridview field empties on RowUpdating command

会有一股神秘感。 提交于 2019-12-13 07:06:07

问题


I currently am using two GridViews tied to different sqldatasources which both accept a value for each row using a textbox. When I go to edit and then update the other fields inside the row, the value which was filled by the textbox turns into an empty value. It was working properly before but after parametrising values as well as adding RowCancelingEdit methods etc it has stopped.

What is it thats making the 'Name' value Null?

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{            
    GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
    String qry = "UPDATE [PlayerStatistics] SET [Name] = @Name, [Apps] = @Apps, [Minutes] = @Minutes, [Goals] = @Goals, [Assists] = @Assists, [Yellows] = @Yellows, [Reds] = @Reds WHERE [PlayerID] = @original_PlayerID";
    using (SqlCommand cmd = new SqlCommand(qry, con))
    {
        cmd.Parameters.AddWithValue("@Name", SqlDbType.VarChar);
        cmd.Parameters.AddWithValue("@Apps", SqlDbType.Int);
        cmd.Parameters.AddWithValue("@Minutes", SqlDbType.Int);
        cmd.Parameters.AddWithValue("@Goals", SqlDbType.Int);
        cmd.Parameters.AddWithValue("@Assists", SqlDbType.Int);
        cmd.Parameters.AddWithValue("@Yellows", SqlDbType.Int);
        cmd.Parameters.AddWithValue("@Reds", SqlDbType.Int);
        cmd.Parameters.AddWithValue("@original_PlayerID", SqlDbType.Int);
        cmd.CommandType = CommandType.Text;
        con.Open();
        cmd.ExecuteNonQuery();
    }
}

Markup:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="PlayerID" DataSourceID="SqlDataSource1" EmptyDataText="Please enter player(s) into the table." OnRowDeleted="GridView1_RowDeleted" OnRowDeleting="GridView1_RowDeleting1" Width="100%" OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="Name" >
        <ControlStyle Width="100%" />
        </asp:BoundField>
        <asp:BoundField DataField="Apps" HeaderText="Apps" SortExpression="Apps" >
        <ControlStyle Width="100%" />
        </asp:BoundField>
        <asp:BoundField DataField="Minutes" HeaderText="Minutes" SortExpression="Minutes" >
        <ControlStyle Width="100%" />
        </asp:BoundField>
        <asp:BoundField DataField="Goals" HeaderText="Goals" SortExpression="Goals" >
        <ControlStyle Width="100%" />
        </asp:BoundField>
        <asp:BoundField DataField="Assists" HeaderText="Assists" SortExpression="Assists" ControlStyle-Width="100%" >
        <ControlStyle Width="100%" />
        </asp:BoundField>
        <asp:BoundField DataField="Yellows" HeaderText="Yellows" SortExpression="Yellows" >
        <ControlStyle Width="100%" />
        </asp:BoundField>
        <asp:BoundField DataField="Reds" HeaderText="Reds" SortExpression="Reds" >
        <ControlStyle Width="100%" />
        </asp:BoundField>
        <asp:TemplateField HeaderText ="Edit/Delete">
            <ItemTemplate>
                <asp:LinkButton ID="BtnEdit" runat="server" CausesValidation="false" CommandName="Edit" Text="Edit" />
                <span onclick="return confirm ('Are you Sure?')" >
                    <asp:LinkButton ID="BtnDelete" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete"/>
                </span>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:Button ID="BtnUpdate" runat="server" CausesValidation="false" CommandName="Update" ConflictDetection="OverwriteChanges" Text="Update" />
                <asp:Button ID="BtnCancel" runat="server" CausesValidation="false" CommandName="Cancel" ConflictDetection="OverwriteChanges" Text="Cancel" />
            </EditItemTemplate>
            <ControlStyle Width="100%" />
        </asp:TemplateField>
    </Columns>
</asp:GridView>


Updated code

Using a stored procedure:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
    //String qry = "UPDATE [PlayerStatistics] SET [Name] = @Name, [Apps] = @Apps, [Minutes] = @Minutes, [Goals] = @Goals, [Assists] = @Assists, [Yellows] = @Yellows, [Reds] = @Reds WHERE [PlayerID] = @original_PlayerID";
    using (SqlCommand cmd = new SqlCommand("UpdatePlayer", con))
    {
        //cmd.Parameters.AddWithValue("@Name", GridView1.DataKeys[e.RowIndex].Values["Name"]);
        //cmd.Parameters.AddWithValue("@Name", SqlDbType.VarChar);
        cmd.Parameters.AddWithValue("@Apps", e.NewValues["Apps"]);
        cmd.Parameters.AddWithValue("@Minutes", e.NewValues["Minutes"]);
        cmd.Parameters.AddWithValue("@Goals", e.NewValues["Goals"]);
        cmd.Parameters.AddWithValue("@Assists", e.NewValues["Assists"]);
        cmd.Parameters.AddWithValue("@Yellows", e.NewValues["Yellows"]);
        cmd.Parameters.AddWithValue("@Reds", e.NewValues["Reds"]);
        cmd.Parameters.AddWithValue("@PlayerID", GridView1.DataKeys[e.RowIndex].Values["PlayerID"]);
        cmd.CommandType = CommandType.StoredProcedure;
        con.Open();
        cmd.ExecuteNonQuery();
    }
    GridView1.EditIndex = -1;
    GridView1.DataBind();
}

回答1:


The second argument of AddWithValue is the value, not the data type. And since the Name field is not editable in your GridView, you can remove it from the update query and from the parameters. Your event handler would look like this:

using (SqlCommand cmd = new SqlCommand("UpdatePlayer", con))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@PlayerID", GridView1.DataKeys[e.RowIndex].Values["PlayerID"]);
    cmd.Parameters.AddWithValue("@Apps", e.NewValues["Apps"]);
    cmd.Parameters.AddWithValue("@Minutes", e.NewValues["Minutes"]);
    ...
}

You should also bind the data to the GridView and reset the EditRowIndex at the end of the RowUpdating event handler:

GridView1.EditIndex = -1;
BindData();


来源:https://stackoverflow.com/questions/36488044/gridview-field-empties-on-rowupdating-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!