【问题标题】:I needed to move row from a gridview to a database table How to?我需要将行从 gridview 移动到数据库表 如何?
【发布时间】:2016-04-12 02:02:54
【问题描述】:

每个人。我需要你的帮助。我正在创建一个在线研讨会注册系统。我有一个 inicale gridview,它显示了节日期间所有可供注册的研讨会。我正在使用会话和复选框将人们想要的研讨会放入下一页的“购物车”中。我需要做的是在纠正写入我的 SQL 数据库中的订单表的初始订单之后。我遇到的问题是当它写入存储在购物车的其他网格视图中的注册数据时。我正在将每一行作为新条目写入订单详细信息表。当我这样做时,程序会做一些非常奇怪的事情。它似乎是从一个网格视图中写入所有数据,该网格视图包含第一页上的所有研讨会信息。 将购物车行写入订单明细表的代码:

 protected void btn_Submit_Click1(object sender, EventArgs e)
{

    foreach (GridViewRow row in Basket.Rows)
    {                    
                Label lblCatCode = (Label)row.FindControl("lblCatCode");
                Label lblTitle = (Label)row.FindControl("lblTitle");

            SqlConnection conBasket = new SqlConnection("Data Source=JONS\\SQLEXPRESS;Initial Catalog=OFFFV2;Integrated Security=True");
            SqlCommand cmdBasket = new SqlCommand("Insert into OrderDetail(OrderID,CatalogeCode,Title)Values(@OrderID,@CatCode,@Title)", conBasket);

            cmdBasket.Parameters.AddWithValue("@OrderID", lblOrderNumber.Text);
            cmdBasket.Parameters.AddWithValue("@CatCode", lblCatCode.Text);
            cmdBasket.Parameters.AddWithValue("@Title", lblTitle.Text);

            try
            {
                conBasket.Open();
                cmdBasket.ExecuteNonQuery();
                conBasket.Close();
            }
            catch (Exception ex)
            {
                lbl_Error.Text = "A database error has orrued. <br <br />" + "Message: " + ex.Message;
            }
        }
    }

这里是gridview的代码

<asp:GridView ID="Basket" runat="server" AutoGenerateColumns="False" DataKeyNames="WorkshopID" DataSourceID="BasketData" EnableViewState="False" ShowFooter="True" OnRowCreated="Basket_RowCreate" CellPadding="4" ForeColor="#333333" GridLines="None" >
    <AlternatingRowStyle BackColor="White" />
    <Columns>
        <asp:TemplateField HeaderText="Remove">
            <ItemTemplate>
                <asp:CheckBox ID="cb_BasketRemove" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Cataloge Code" SortExpression="CatalogeCode">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("CatalogeCode") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblCatCode" runat="server" Text='<%# Eval("CatalogeCode") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Title" SortExpression="Title">
            <ItemTemplate>
                <asp:Label ID="lblTitle" runat="server" Text='<%# Eval("Title") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <strong>
                    Total Price:
                </strong>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Price" SortExpression="Price">
            <ItemTemplate>
                <asp:Label ID="Price" runat="server" Text='<%# Eval("Price") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <strong>
                    <asp:Literal ID="TotalPrice" runat ="server" />
                </strong>
             </FooterTemplate>
        </asp:TemplateField>
    </Columns>
    <EditRowStyle BackColor="#2461BF" />
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#EFF3FB" />
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#F5F7FB" />
    <SortedAscendingHeaderStyle BackColor="#6D95E1" />
    <SortedDescendingCellStyle BackColor="#E9EBEF" />
    <SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>

我了解我的上一个帖子不清楚并且已关闭。我不知道为什么该程序正在做它正在做的事情。我想知道这是否与我将数据从第一个 gridview 获取到购物车的方式有关。
这是所选行的会话代码

protected void Page_Load(object sender, EventArgs e)
{

}

protected void btt_Select_Click(object sender, EventArgs e)
{
    var selectedWorkshop = GridView1.Rows.Cast<GridViewRow>().Where(row => ((CheckBox)row.FindControl("RegisteredWorkshop")).Checked).Select(row => GridView1.DataKeys[row.RowIndex].Value.ToString()).ToList();
    if (Session["cart"] == null)
    {
    Session["cart"] = selectedWorkshop;
    }
    else
    {
    var cart = (List<string>)Session["cart"];
        foreach (var workshop in selectedWorkshop)
            cart.Add(workshop);
        Session["cart"] = cart;
    }
    foreach (GridViewRow row in GridView1.Rows)
    {
        CheckBox cb = (CheckBox)row.FindControl("RegisteredWorkshop");
        if (cb.Checked)
            cb.Checked = false;
    }
}
protected void btt_CheckOut_Click(object sender, EventArgs e)
{
    if (Session["cart"] != null)
        Response.Redirect("Checkout.aspx");

}
}

注册者从各个研讨会中选择的选择网格视图的代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource3" CellPadding="4" DataKeyNames="WorkshopID" ForeColor="#333333" GridLines="None">
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:TemplateField HeaderText ="Register">
                <ItemTemplate>
                   <asp:CheckBox ID="RegisteredWorkshop" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="FestivalYear" HeaderText="Festival Year" />
            <asp:BoundField DataField="CatalogeCode" HeaderText="Catalog Code" />
            <asp:BoundField DataField="Title" HeaderText="Title" />
            <asp:BoundField DataField="WSDescription" HeaderText="Workshop Description" />
            <asp:BoundField DataField="DayOffered" HeaderText="Day Offered" />
            <asp:BoundField DataField="Lenght" HeaderText="Workshop Lenght" />
            <asp:BoundField DataField="BeginingTime" HeaderText="Start Time" />
            <asp:BoundField DataField="Price" HeaderText="Workshop Fee" />
            <asp:BoundField DataField="WorkshopID" HeaderText="Workshop Id" Visible="False" />
        </Columns>

【问题讨论】:

  • 您是否尝试过调试您的程序?我仍然不确定你的问题是什么,你能清楚地解释你想要达到什么目标吗?
  • 是的,这一切似乎都发生在 foreach 循环(应该只通过 ID 篮子的 gridview 运行)实际上正在访问我用来填充篮子 ID 的数据源时。数据源是一个简单的 select * from Workshop(保存不同车间信息的表。此时用于测试,表中只有三个车间。)但是,当 foreach 循环触发时,它会获取目录代码和标题车间表中的所有当前车间商店。

标签: c# sql asp.net gridview


【解决方案1】:

我可能错了,但您的变量命名似乎已关闭(混淆了购物车和购物车?)。

您可能需要这样做:

protected void btn_Submit_Click1(object sender, EventArgs e)
{
   var Basket = (List<string>)Session["cart"];   // ADD THIS LINE

    foreach (GridViewRow row in Basket.Rows)
    {    

【讨论】:

  • 购物篮是gridview ID,购物车是从原始页面带来所选研讨会的会话名称。
  • 史蒂夫,谢谢你的想法,但那行不通。因为 foreach 循环正在寻找一个网格视图来运行我想要放置在订单详细信息列表中的不同标签。我在亨德利的评论中解释了一些我认为发生的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多