【问题标题】:Foreach StatementForeach 语句
【发布时间】:2015-09-28 13:55:26
【问题描述】:

我想从listview中插入多行数据到数据库

我遇到了一个错误说明:

不存在从对象类型 System.Web.UI.WebControls.Literal 到已知托管提供程序本机类型的映射。

我有这个aspx

<asp:ListView ID="lvPODetails" runat="server">
    <ItemTemplate>
        <tr>
            <td>
                <asp:Literal ID="ltRefNo" runat="server" Text='<%# Eval("PODetailNo") %>' Visible="false" />
                <%# Eval("ProductName")%>
            </td>
            <td>
                <%# Eval("Price", "{0: #,###.00}") %>
            </td>
            <td><%# Eval("DesiredQuantity") %></td>
            <td><asp:TextBox ID="txtQuantity" runat="server" type="number" Text='<%# Eval("DesiredQuantity") %>' class="form-control" /></td>
            <td><%# Eval("POAmount", "{0: #,###.00}") %></td>
            <td><%# Eval("POAmount", "{0: #,###.00}") %></td>
            <td>

            </td>
        </tr>

    </ItemTemplate>
    <EmptyDataTemplate>
        <tr>
            <td colspan="4"><h2 class="text-center">No records found.</h2></td>
        </tr>
    </EmptyDataTemplate>
</asp:ListView>

这是我插入的 .cs

 protected void btnAdd_Click(object sender, EventArgs e)
{

    foreach (ListViewItem item in lvPODetails.Items)
    {
        TextBox quantity = (TextBox)item.FindControl("txtQuantity");
        Literal ltr = (Literal)item.FindControl("ltRefNo");


        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "INSERT INTO Inventory VALUES (@ProductID, @Quantity)";
        cmd.Parameters.AddWithValue("@ProductID", ltr);
        cmd.Parameters.AddWithValue("@Quantity", quantity);
        cmd.ExecuteNonQuery();
        con.Close();

    }

}

我认为foreach循环是错误的,但我不能说它有什么问题。

【问题讨论】:

  • 你的意思是cmd.Parameters.AddWithValue("@ProductID", ltr.Text);(最后注意.Text)?

标签: c# asp.net


【解决方案1】:

ltr.Text

 protected void btnAdd_Click(object sender, EventArgs e)
{

    foreach (ListViewItem item in lvPODetails.Items)
    {
        TextBox quantity = (TextBox)item.FindControl("txtQuantity");
        Literal ltr = (Literal)item.FindControl("ltRefNo");


        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "INSERT INTO Inventory VALUES (@ProductID, @Quantity)";
        cmd.Parameters.AddWithValue("@ProductID", ltr.Text);
        cmd.Parameters.AddWithValue("@Quantity", quantity.Text);
        cmd.ExecuteNonQuery();
        con.Close();

    }

}

希望您的问题得到解决。

【讨论】:

  • @Downvoter - 请发表评论?这个答案有什么问题?
  • 非常感谢这个帮助
【解决方案2】:

您应该对 Literal 和 TextBox 都使用 .Text

cmd.Parameters.AddWithValue("@ProductID", ltr.Text);
cmd.Parameters.AddWithValue("@Quantity", quantity.Text);

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.literal.text(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.text(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 2017-09-27
    • 2015-06-18
    • 2014-06-18
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多