0

我在 asp.net 上做项目。现在我遇到了从gridview插入数据到sql server的问题。在我的 gridview 中,我添加了一个模板作为文本框以输入值。我的问题是关于从 gridview 的文本框中插入值到 sql server。我的代码如下:

<%@ Page Title="" Language="C#" MasterPageFile="~/coca.Master" AutoEventWireup="true"     CodeBehind="Orders.aspx.cs" Inherits="AssignmentWeb.Orders" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div class="center">
     <script type="text/javascript"     src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("[id*=txtQty]").val("0");
        });
        $("[id*=txtQty]").live("change", function () {
            if (isNaN(parseInt($(this).val()))) {
                $(this).val('0');
            } else {
                $(this).val(parseInt($(this).val()).toString());
            }
        });
        $("[id*=txtQty]").live("keyup", function () {
            if (!jQuery.trim($(this).val()) == '') {
                if (!isNaN(parseFloat($(this).val()))) {
                    var row = $(this).closest("tr");
                    $("[id*=lblTotal]", row).html(parseFloat($(".price", row).html()) *     parseFloat($(this).val()));
                }
            } else {
                $(this).val('');
            }
            var grandTotal = 0;
            $("[id*=lblTotal]").each(function () {
                grandTotal = grandTotal + parseFloat($(this).html());
            });
            $("[id*=lblGrandTotal]").html(grandTotal.toString());
        });
    </script>
    <br />
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True"     AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="SqlDataSource1"     EnableModelValidation="True">
        <Columns>
            <asp:BoundField DataField="ProductID" HeaderText="ProductID"     ReadOnly="True" SortExpression="ProductID" />
            <asp:BoundField DataField="ProductName" HeaderText="ProductName"     SortExpression="ProductName" />
            <asp:BoundField DataField="AverageProduct" HeaderText="AverageProduct"     SortExpression="AverageProduct" ItemStyle-CssClass="price"/>
            <asp:BoundField DataField="Description" HeaderText="Description"     SortExpression="Description" />
            <asp:TemplateField HeaderText="QtyOrder">
                <ItemTemplate>
                    <asp:Textbox ID="txtQty" runat="server"></asp:Textbox>
                 </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Total">
                <ItemTemplate>
                    <asp:Label ID="lblTotal" runat="server"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
     Grand Total:
    <asp:Label ID="lblGrandTotal" runat="server" Text="0"></asp:Label>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$     ConnectionStrings:InventoryRouting %>" SelectCommand="SELECT [ProductName],     [AverageProduct], [Description], [ProductID] FROM [Product]"></asp:SqlDataSource>
&nbsp;<br />
    <asp:Button ID="btnOrder" runat="server" Text="Order!" Width="100px"     OnClick="btnOrder_Click"/>
    <br />
    <br />
    </div>
</asp:Content>

<script runat="server">
    public void btnOrder_Click(object sender, EventArgs e)
    {
        int c = 0;
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            GridViewRow row = GridView1.Rows[i];
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = new SqlConnection("Data Source=LIDA-PC; Initial     Catalog=InventoryRouting; Integrated Security=True");
            //cmd.CommandText = "insert into orders values('" +     Session["Username"].ToString() + "',@ProductID, @ProductName, @QtyOrder, @Total)";
            cmd.CommandText = "insert into orders values('" +     Session["Username"].ToString() + "',@ProductID , @ProductName, @QtyOrder, @Total)";
            cmd.Connection .Open();
            //cmd.Parameters.AddWithValue("'" + Session["Username"].ToString() + "'",        GridView1.Rows[i].Cells[1].Text);
            cmd.Parameters.AddWithValue("@ProductID", GridView1.Rows[i].Cells[0].Text);
            cmd.Parameters.AddWithValue("@ProductName",     GridView1.Rows[i].Cells[1].Text);
            cmd.Parameters.AddWithValue("@QtyOrder", GridView1.Rows[i].Cells[4].Text);
            cmd.Parameters.AddWithValue("@Total", GridView1.Rows[i].Cells[5].Text);
            //InsertCommand = new SqlCommand("INSERT INTO [orders] ([client],     [product], [amount], [price]) VALUES ('" + Session["Username"].ToString() + "',     @ProductName, @AverageProduct, @QtyOrder, @Total)");
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
            c = c + 1;
        }
    }
</script>
4

1 回答 1

1

您需要将网格视图行单元格控件显式转换为适当的控件。

像这样访问((Textbox)(GridView1.Rows[i].Cells[4].Controls[0]).Text您的@QtyOrder

对于@Total ((Label)(GridView1.Rows[i].Cells[5].Controls[0]).Text

或者

(GridView1.Rows[i].FindControl("txtQty") as TextBox).Text

谢谢。

于 2013-05-24T06:29:36.173 回答