c# - 从 gridview 插入到我的数据库中的值从第二列开始对于其余列都是相同的

标签 c# mysql asp.net gridview

我能够插入数据而没有任何错误,但这些值不符合需要。

Here is my gridview with data

第二张图片是我的数据库 Here is what is being inserted to my database

aspnet代码

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" DataKeyNames="RefNo" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="RefNo" HeaderText="RefNo" InsertVisible="False" 
            ReadOnly="True" SortExpression="RefNo" />
        <asp:TemplateField HeaderText="ProductID" SortExpression="ProductID">
            <EditItemTemplate>
                <asp:TextBox ID="ProductID" runat="server" Text='<%# Eval("ProductID") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="txtProductid" runat="server" Text='<%# Eval("ProductID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name" SortExpression="Name">
            <EditItemTemplate>
                <asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Name" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Quantity" HeaderText="Quantity" 
            SortExpression="Quantity" />
        <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
        <asp:BoundField DataField="Amount" HeaderText="Amount" 
            SortExpression="Amount" />
    </Columns>

</asp:GridView>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyOwnMeatshopConnectionString %>" 
    SelectCommand="SELECT Orders.RefNo, Orders.ProductID, Products.Name, Orders.Quantity, Orders.Price, Orders.Amount FROM Orders INNER JOIN Products ON Orders.ProductID = Products.ProductID">
</asp:SqlDataSource>

<asp:Button ID="btnSave" runat="server" class="btn btn" Text="Save" 
    style="color:White" BackColor="Black" onclick="btnSave_Click"/>
</form>

隐藏代码

    protected void btnSave_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {


            if (row.RowType == DataControlRowType.DataRow)
            {


                string RefNo = GridView1.DataKeys[row.RowIndex].Values[0].ToString();
                string ProductID = GridView1.DataKeys[row.RowIndex].Values["txtProductid"].ToString();
                //Label ProductID = (row.FindControl("ProductID") as Label);
                Label Name = row.FindControl("Name") as Label;
                string Price = GridView1.DataKeys[row.RowIndex].Values[0].ToString();
                string Quantity = GridView1.DataKeys[row.RowIndex].Values[0].ToString();
                string Amount = GridView1.DataKeys[row.RowIndex].Values[0].ToString();

                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandText = "INSERT INTO SODetails (SOID, RefNo, ProductID, Name, Price, Quantity, Amount) VALUES (@SOID, @RefNo, @ProductID, @Name, @Price, @Quantity, @Amount)";

                cmd.Parameters.AddWithValue("@UserID", Session["userid"].ToString());

                cmd.Parameters.Add("@SOID", SqlDbType.VarChar).Value = SOID;
                cmd.Parameters.Add("@RefNo", SqlDbType.VarChar).Value = RefNo.ToString();
                cmd.Parameters.Add("@ProductID", SqlDbType.VarChar).Value = ProductID;
                cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = Name.Text;
                cmd.Parameters.Add("@Price", SqlDbType.VarChar).Value = Price.ToString();
                cmd.Parameters.Add("@Quantity", SqlDbType.VarChar).Value = Quantity.ToString();
                cmd.Parameters.Add("@Amount", SqlDbType.VarChar).Value = Amount.ToString();

                cmd.ExecuteNonQuery();
                SqlDataReader dr = cmd.ExecuteReader();

                cmd.CommandText = "SELECT SOID, RefNo, ProductID, Name, Price, Quantity, Amount FROM SODetails";

                GridView1.EditIndex = -1;
                GridView1.DataBind();

                con.Close();

            }
        }

    }

最佳答案

更改以下代码并从 BoundFields 获取,因为 Value[0] 是 Ref 列值:

string Price = GridView1.DataKeys[row.RowIndex].Values[0].ToString();
string Quantity = GridView1.DataKeys[row.RowIndex].Values[0].ToString();
string Amount = GridView1.DataKeys[row.RowIndex].Values[0].ToString();

关于c# - 从 gridview 插入到我的数据库中的值从第二列开始对于其余列都是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35056805/

相关文章:

javascript - 当某些情况出现时显示警报错误消息

c# - 不包含分隔符时的字符串拆分实用程序方法问题

c# - 在 C# 的结构中创建固定大小的字符串?

MySQL 从具有一行的表中选择

mysql - SQL奇怪错误默认值

javascript - 在 POST 之前进行提交延迟

c# - 找不到 sn.exe 来签署程序集

c# - 优化 LINQ 查询

mysql - 如何将文本文件中的数据导入特定的 MySQL 列?

c# - 有条件地禁用 ASP.NET MVC Controller