Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将内容从前端应用程序推送到数据库_C#_Asp.net_Gridview - Fatal编程技术网

C# 无法将内容从前端应用程序推送到数据库

C# 无法将内容从前端应用程序推送到数据库,c#,asp.net,gridview,C#,Asp.net,Gridview,我在VisualStudio中开发了一个前端,用户可以使用它与数据库进行交互。唯一的问题是更新无法从gridview运行。我尝试了多种方法来解决这个问题。我已经附上了有问题的表格的图片和gridview的代码。有人能指出我的错误吗 单击“更新”按钮时出错: 索引超出范围。必须为非负数且小于集合的大小。 参数名称:索引 ASPX: 您在aspx页面中没有提到DataKeyName。但是,在行更新中,您试图访问Datakey的值[0]。这就是为什么会出现这个错误 解决方案: 在aspx页面中指定“

我在VisualStudio中开发了一个前端,用户可以使用它与数据库进行交互。唯一的问题是更新无法从gridview运行。我尝试了多种方法来解决这个问题。我已经附上了有问题的表格的图片和gridview的代码。有人能指出我的错误吗

单击“更新”按钮时出错:

索引超出范围。必须为非负数且小于集合的大小。 参数名称:索引

ASPX:


您在aspx页面中没有提到DataKeyName。但是,在行更新中,您试图访问Datakey的值[0]。这就是为什么会出现这个错误

解决方案: 在aspx页面中指定“DataKeyNames=ID”


有关了解DataKey概念的信息,请参阅显示gridview的aspx。除非显示aspx页面,否则无法准确识别问题。但是当您试图访问不存在的索引时,
索引超出了范围。它很可能位于
行。单元格[Index]。控件[0]
以确定确切的问题,调试代码并检查错误的确切位置。@NK我已将问题编辑为包含aspx。感谢you@SpiderCode我已将问题编辑为包含aspx。谢谢您没有在您的aspx页面中指定数据键名称您好,我在运行解决方案时在DataKeyNames=“Id”中添加了数据键名称。它将整个数据库的默认值设置为1,我如何能够使用用户将整个数据库的值进行更新?非常感谢您的帮助。这是因为您正在将每个字段的值设置为DataKey value,这是您案例中ID字段的值。这就是将所有内容设置为1的原因。要更正此问题,您可以像使用“Evo_ItemCode”一样设置字段的值,也可以尝试NewValues[]方法,请让我知道如果你再次陷入困境,你能告诉我一个Int和float值,我会怎么做吗?
private void BindGrid()
    {
        string constr = ConfigurationManager.ConnectionStrings["ZS_CS_EVO_IntegrationConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT Id, Period_Id, Evo_StockLink, Evo_ItemCode, Evo_Description, UnitRate, MinRate, RateBeforeSevenDays, RateAfterSevenDays FROM rates"))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    using (DataTable dt = new DataTable())
                    {
                        sda.Fill(dt);
                        GridView1.DataSource = dt;
                        GridView1.DataBind();
                    }
                }
            }
        }
    }

    protected void OnRowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        this.BindGrid();
    }

    protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = GridView1.Rows[e.RowIndex];
        int Id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        int Period_Id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        int Evo_StockLink = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        string Evo_ItemCode = (row.Cells[3].Controls[0] as TextBox).Text;
        string Evo_Description = (row.Cells[4].Controls[0] as TextBox).Text;
        float UnitRate = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        float MinRate = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        float RateBeforeSevenDays = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        float RateAfterSevenDays = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
        string constr = ConfigurationManager.ConnectionStrings["ZS_CS_EVO_IntegrationConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("UPDATE rates SET Period_Id = @Period_Id, Evo_StockLink = @Evo_StockLink, Evo_ItemCode = @Evo_ItemCode, Evo_Description = @Evo_Description, UnitRate = @UnitRate, MinRate = @MinRate, RateBeforeSevenDays = @RateBeforeSevenDays, RateAfterSevenDays = @RateAfterSevenDays  WHERE Id = @Id"))
            {
                cmd.Parameters.AddWithValue("@Id", Id);
                cmd.Parameters.AddWithValue("@Period_Id", Period_Id);
                cmd.Parameters.AddWithValue("@Evo_StockLink", Evo_StockLink);
                cmd.Parameters.AddWithValue("@Evo_ItemCode", Evo_ItemCode);
                cmd.Parameters.AddWithValue("@Evo_Description", Evo_Description);
                cmd.Parameters.AddWithValue("@UnitRate", UnitRate);
                cmd.Parameters.AddWithValue("@MinRate", MinRate);
                cmd.Parameters.AddWithValue("@RateBeforeSevenDays", RateBeforeSevenDays);
                cmd.Parameters.AddWithValue("@RateAfterSevenDays", RateAfterSevenDays);
                cmd.Connection = con;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
        GridView1.EditIndex = -1;
        this.BindGrid();
    }
<asp:GridView ID="GridView1" runat="server" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit" OnRowUpdating="OnRowUpdating" AutoGenerateEditButton="True" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" PageSize="3">
        <AlternatingRowStyle BackColor="#DCDCDC" />
        <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
        <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
        <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F1F1F1" />
        <SortedAscendingHeaderStyle BackColor="#0000A9" />
        <SortedDescendingCellStyle BackColor="#CAC9C9" />
        <SortedDescendingHeaderStyle BackColor="#000065" />
    </asp:GridView>
    <asp:SqlDataSource ID="RatesLink" runat="server" 
ConnectionString="<%$ ConnectionStrings:ZS_CS_EVO_IntegrationConnectionString %>" 
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [rates]" 
ConflictDetection="CompareAllValues" DeleteCommand="DELETE FROM [rates] WHERE [id] = @original_id AND (([Period_Id] = @original_Period_Id) OR ([Period_Id] IS NULL AND @original_Period_Id IS NULL)) AND [Evo_StockLink] = @original_Evo_StockLink AND [Evo_ItemCode] = @original_Evo_ItemCode AND (([Evo_Description] = @original_Evo_Description) OR ([Evo_Description] IS NULL AND @original_Evo_Description IS NULL)) AND [UnitRate] = @original_UnitRate AND [MinRate] = @original_MinRate AND [RateBeforeSevenDays] = @original_RateBeforeSevenDays AND [RateAfterSevenDays] = @original_RateAfterSevenDays" InsertCommand="INSERT INTO [rates] ([Period_Id], [Evo_StockLink], [Evo_ItemCode], 
[Evo_Description], [UnitRate], [MinRate], [RateBeforeSevenDays], [RateAfterSevenDays]) VALUES (@Period_Id, @Evo_StockLink, @Evo_ItemCode, @Evo_Description, @UnitRate, @MinRate, @RateBeforeSevenDays, @RateAfterSevenDays)" UpdateCommand="UPDATE [rates] SET [Period_Id] = @Period_Id, [Evo_StockLink] = @Evo_StockLink, 
[Evo_ItemCode] = @Evo_ItemCode, [Evo_Description] = @Evo_Description, [UnitRate] = @UnitRate, [MinRate] = @MinRate, [RateBeforeSevenDays] = @RateBeforeSevenDays, [RateAfterSevenDays] = @RateAfterSevenDays WHERE [id] = @original_id AND (([Period_Id] = @original_Period_Id) OR ([Period_Id] IS NULL AND @original_Period_Id IS NULL)) AND [Evo_StockLink] = @original_Evo_StockLink AND [Evo_ItemCode] = @original_Evo_ItemCode AND (([Evo_Description] = @original_Evo_Description) OR ([Evo_Description] IS NULL AND @original_Evo_Description IS NULL)) AND [UnitRate] = @original_UnitRate AND [MinRate] = @original_MinRate AND [RateBeforeSevenDays] = @original_RateBeforeSevenDays AND [RateAfterSevenDays] = @original_RateAfterSevenDays">
        <DeleteParameters>
            <asp:Parameter Name="original_id" Type="Int32" />
            <asp:Parameter Name="original_Period_Id" Type="Int32" />
            <asp:Parameter Name="original_Evo_StockLink" Type="Int32" />
            <asp:Parameter Name="original_Evo_ItemCode" Type="String" />
            <asp:Parameter Name="original_Evo_Description" Type="String" />
            <asp:Parameter Name="original_UnitRate" Type="Double" />
            <asp:Parameter Name="original_MinRate" Type="Double" />
            <asp:Parameter Name="original_RateBeforeSevenDays" Type="Double" />
            <asp:Parameter Name="original_RateAfterSevenDays" Type="Double" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="Period_Id" Type="Int32" />
            <asp:Parameter Name="Evo_StockLink" Type="Int32" />
            <asp:Parameter Name="Evo_ItemCode" Type="String" />
            <asp:Parameter Name="Evo_Description" Type="String" />
            <asp:Parameter Name="UnitRate" Type="Double" />
            <asp:Parameter Name="MinRate" Type="Double" />
            <asp:Parameter Name="RateBeforeSevenDays" Type="Double" />
            <asp:Parameter Name="RateAfterSevenDays" Type="Double" />
        </InsertParameters>
        <UpdateParameters>
            <asp:Parameter Name="Period_Id" Type="Int32" />
            <asp:Parameter Name="Evo_StockLink" Type="Int32" />
            <asp:Parameter Name="Evo_ItemCode" Type="String" />
            <asp:Parameter Name="Evo_Description" Type="String" />
            <asp:Parameter Name="UnitRate" Type="Double" />
            <asp:Parameter Name="MinRate" Type="Double" />
            <asp:Parameter Name="RateBeforeSevenDays" Type="Double" />
            <asp:Parameter Name="RateAfterSevenDays" Type="Double" />
            <asp:Parameter Name="original_id" Type="Int32" />
            <asp:Parameter Name="original_Period_Id" Type="Int32" />
            <asp:Parameter Name="original_Evo_StockLink" Type="Int32" />
            <asp:Parameter Name="original_Evo_ItemCode" Type="String" />
            <asp:Parameter Name="original_Evo_Description" Type="String" />
            <asp:Parameter Name="original_UnitRate" Type="Double" />
            <asp:Parameter Name="original_MinRate" Type="Double" />
            <asp:Parameter Name="original_RateBeforeSevenDays" Type="Double" />
            <asp:Parameter Name="original_RateAfterSevenDays" Type="Double" />
        </UpdateParameters>
    </asp:SqlDataSource>