如何将数据保存到已保存在datatable中的数据库,并使用c#绑定到asp.net中的gridview

时间:2016-02-22 09:09:33

标签: asp.net database gridview datatable ado.net

我正在使用Visual Studio 2010和SQL Server 2008.我想将数据保存到DataTable中的数据库。我有两个表Purchase_Master和Purchase_Detail。如下图所示

Create table Purchase_Master
(
  PurchaseNo int Primary Key,
  PDate nvarchar(50),
  Total int,
  OtherCharges int,
  GrandTotal int 
);

Create Table Purchase_Detail
(
  ID int Identity(1,1) Primary Key,
  PurchaseNo int,
  Category nvarchar(50),
  ItemCode nvarchar(50),
  ItemName nvarchar(50),
  Qty int,
  Rate int,
  Amount int,
  FOREIGN KEY (PurchaseNo) REFERENCES Purchase_Master(PurchaseNo)
);

创建表我想保存输入gridview1的数据以保存在数据库表中。任何人都可以帮助我

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm6.aspx.cs" Inherits="Practice.WebForm6" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Purchase Order</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table> 
      <tr>
      <td><asp:Label ID="lblPurchaseNo" runat="server" Text="Purchase No:"></asp:Label></td>
      <td><asp:TextBox ID="txtPurchaseNo" runat="server"></asp:TextBox></td>
      </tr>

       <tr>
        <td><asp:Label ID="lblDate" runat="server" Text="Date: "></asp:Label><sup class="required">*</sup></td>
        <td><asp:TextBox ID="txtDate" runat="server"></asp:TextBox></td>
        <td><asp:ImageButton ID="IbtnCalendar" runat="server" Height="25px" ImageUrl="~/Images/calendar.png" Width="30px" onclick="IbtnCalendar_Click"/>
        <asp:Calendar ID="Calendar1" runat="server" Visible="False" onselectionchanged="Calendar1_SelectionChanged"></asp:Calendar></td>
    </tr>
      </table>
      <br />
      <asp:GridView ID="GridView1" runat="server" ShowFooter="True" AutoGenerateColumns="False" CellPadding="0" >
        <Columns>
        <asp:BoundField DataField="sr_no" HeaderText="Sr.No" />
        <asp:TemplateField HeaderText="Category">
                <ItemTemplate>
                    <asp:DropDownList ID="DropDownList1" runat="server">
                        <asp:ListItem Value="-1">Select</asp:ListItem>
                        <asp:ListItem>Books</asp:ListItem>
                        <asp:ListItem>Electronics</asp:ListItem>
                        <asp:ListItem>Men</asp:ListItem>
                        <asp:ListItem>Women</asp:ListItem>
                        <asp:ListItem>Sports</asp:ListItem>
                    </asp:DropDownList>
                </ItemTemplate>
        </asp:TemplateField>
            <asp:TemplateField HeaderText="Item Code">
                <ItemTemplate>
                    <asp:TextBox ID="txtItemCode" runat="server"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
        <asp:TemplateField HeaderText="Item Name">
            <ItemTemplate>
                <asp:TextBox ID="txtItemName" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Quantity">
            <ItemTemplate>
                <asp:TextBox ID="txtQty" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Rate">
            <ItemTemplate>
                <asp:TextBox ID="txtRate" runat="server"></asp:TextBox>
            </ItemTemplate>


            </asp:TemplateField>
            <asp:TemplateField HeaderText="Amount" FooterStyle-HorizontalAlign="Right">
                <FooterTemplate>
                    <asp:Button ID="ButtonAdd" runat="server" 
                        Text="Add New Row" onClick="ButtonAdd_Click" />
                </FooterTemplate>
                <ItemTemplate>
                    <asp:TextBox ID="txtAmt" runat="server"  ></asp:TextBox>
                </ItemTemplate>
    <FooterStyle HorizontalAlign="Right"></FooterStyle>
            </asp:TemplateField>
        </Columns> </asp:GridView>        <table align="center"> 
    <tr>
        <td><asp:Label ID="lblTotal" runat="server" Text="Total: "></asp:Label><sup class="required">*</sup></td>
        <td><asp:TextBox ID="txtTotal" runat="server"></asp:TextBox> </td>
    </tr>
    <tr>
         <td><asp:Label ID="lblOtherCharges" runat="server" Text="Other Charges: "></asp:Label><sup class="required">*</sup></td>
         <td><asp:TextBox ID="txtOtherCharges" runat="server"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="lblGrandTotal" runat="server" Text="Grand Total: "></asp:Label><sup class="required">*</sup></td>
        <td><asp:TextBox ID="txtGrandTotal" runat="server"></asp:TextBox> </td>
    </tr>
    <tr><td><asp:Button ID="btnSubmit" runat="server" Text="Submit" 
           onclick="btnSubmit_Click" /></td> </tr> 
    <asp:Label ID="Label1" runat="server" Text=></asp:Label>
</table>

这是aspx.cs

    public partial class WebForm6 : System.Web.UI.Page
{
    private ArrayList GetDummyData()
    {
        ArrayList arr = new ArrayList();
        arr.Add(new ListItem("Books", "1"));
        arr.Add(new ListItem("Electronics", "2"));
        arr.Add(new ListItem("Men", "3"));
        arr.Add(new ListItem("Women", "4"));
        arr.Add(new ListItem("Sports", "5"));
        return arr;
    }
    private void FillDropDownList(DropDownList ddl)
    {
        ArrayList arr = GetDummyData();
        foreach (ListItem item in arr)
        {
            ddl.Items.Add(item);
        }
    }
    private int numOfRows = 1;
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginConnectionString"].ConnectionString);
    private void SetInitialRow()
    {

        DataTable dt = new DataTable();
        DataRow dr = null;
        dt.TableName = "CurrentTable";
        dt.Columns.Add(new DataColumn("sr_no", typeof(string)));
        dt.Columns.Add(new DataColumn("Category", typeof(string)));
        dt.Columns.Add(new DataColumn("ItemCode", typeof(string)));
        dt.Columns.Add(new DataColumn("ItemName", typeof(string)));
        dt.Columns.Add(new DataColumn("Qty", typeof(string)));
        dt.Columns.Add(new DataColumn("Rate", typeof(string)));
        dt.Columns.Add(new DataColumn("Amt", typeof(string)));

        dr = dt.NewRow();
        dr["sr_no"] = 1;
        dr["Category"] = string.Empty;
        dr["ItemCode"] = string.Empty;
        dr["ItemName"] = string.Empty;
        dr["Qty"] = string.Empty;
        dr["Rate"] = string.Empty;
        dr["Amt"] = string.Empty;

        dt.Rows.Add(dr);

        //Store the DataTable in ViewState
        ViewState["CurrentTable"] = dt;

        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

    protected void IbtnCalendar_Click(object sender, ImageClickEventArgs e)
    {
        Calendar1.Visible = true;
    }

    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
        txtDate.Text = Calendar1.SelectedDate.ToString("dd/MM/yyyy");
        Calendar1.Visible = false;
    }
    private void AddNewRowToGrid()
    {
        int rowIndex = 0;
        if (ViewState["CurrentTable"] != null)
        {
            DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
            DataRow drCurrentRow = null;
            if (dtCurrentTable.Rows.Count > 0)
            {
                for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
                {
                    //extract the TextBox values
                    DropDownList dd1 = (DropDownList)GridView1.Rows[rowIndex].Cells[1].FindControl("DropDownList1");
                    TextBox box1 = (TextBox)GridView1.Rows[rowIndex].Cells[2].FindControl("txtItemCode");
                    TextBox box2 = (TextBox)GridView1.Rows[rowIndex].Cells[3].FindControl("txtItemName");
                    TextBox box3 = (TextBox)GridView1.Rows[rowIndex].Cells[4].FindControl("txtQty");
                    TextBox box4 = (TextBox)GridView1.Rows[rowIndex].Cells[5].FindControl("txtRate");
                    TextBox box5 = (TextBox)GridView1.Rows[rowIndex].Cells[6].FindControl("txtAmt");
                    drCurrentRow = dtCurrentTable.NewRow();
                    //sc.Add(dd1.Text + "," + box1.Text+","+box2.Text+","+box3.Text+","+box4.Text+","+box5.Text);
                    drCurrentRow["sr_no"] = i + 1;
                    FillDropDownList(dd1);
                    drCurrentRow["ItemCode"] = box1.Text;
                    drCurrentRow["ItemName"] = box2.Text;
                    drCurrentRow["Qty"] = box3.Text;
                    drCurrentRow["Rate"] = box4.Text;
                    drCurrentRow["Amt"] = box5.Text;

                    rowIndex++;
                }

                //add new row to DataTable
                dtCurrentTable.Rows.Add(drCurrentRow);
                //Store the current data to ViewState
                ViewState["CurrentTable"] = dtCurrentTable;

                //Rebind the Grid with the current data
                GridView1.DataSource = dtCurrentTable;
                GridView1.DataBind();
            }
        }
        else
        {
            Response.Write("ViewState is null");
        }

        //Set Previous Data on Postbacks
        SetPreviousData();
    }

    private void SetPreviousData()
    {

        int rowIndex = 0;
        if (ViewState["CurrentTable"] != null)
        {
            DataTable dt = (DataTable)ViewState["CurrentTable"];
            if (dt.Rows.Count > 0)
            {
                for (int i = 1; i < dt.Rows.Count; i++)
                {
                    DropDownList dd1 = (DropDownList)GridView1.Rows[rowIndex].Cells[1].FindControl("DropDownList1");
                    TextBox box1 = (TextBox)GridView1.Rows[rowIndex].Cells[2].FindControl("txtItemCode");
                    TextBox box2 = (TextBox)GridView1.Rows[rowIndex].Cells[3].FindControl("txtItemName");
                    TextBox box3 = (TextBox)GridView1.Rows[rowIndex].Cells[4].FindControl("txtQty");
                    TextBox box4 = (TextBox)GridView1.Rows[rowIndex].Cells[5].FindControl("txtRate");
                    TextBox box5 = (TextBox)GridView1.Rows[rowIndex].Cells[6].FindControl("txtAmt");

                    FillDropDownList(dd1);
                    box1.Text = dt.Rows[i]["ItemCode"].ToString();
                    box2.Text = dt.Rows[i]["ItemName"].ToString();
                    box3.Text = dt.Rows[i]["Qty"].ToString();
                    box4.Text = dt.Rows[i]["Rate"].ToString();
                    box5.Text = dt.Rows[i]["Amt"].ToString();

                    rowIndex++;

                }
            }
        }
    }

    protected void txtQty_TextChanged(object sender, EventArgs e)
    {
        // if(txtQty.Text == null)
        // {
        //txtAmount.Text = Convert.ToString(Convert.ToDouble(txtQty.Text) * Convert.ToDouble(txtRate.Text));
        // }
    }


    protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        AddNewRowToGrid();
    }

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            SetInitialRow();
        }
    }

    private void BulkInsertToDataBase()
    {
        try
        {
            DataTable dt = (DataTable)ViewState["CurrentTable"];
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginConnectionString"].ConnectionString);
            con.Open();

            //creating object of SqlBulkCopy
            //SqlBulkCopy objbulk = new SqlBulkCopy(con);
            using (var objbulk = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.KeepIdentity))
            {
                //assigning Destination table name
                objbulk.DestinationTableName = "Purchase_Detail";

                foreach (DataColumn col in dt.Columns)
                {
                    //Mapping Table column
                    objbulk.ColumnMappings.Add("sr_no", "PurchaseNo");
                    objbulk.ColumnMappings.Add("Category", "Category");
                    objbulk.ColumnMappings.Add("ItemCode", "ItemCode");
                    objbulk.ColumnMappings.Add("ItemName", "ItemName");
                    objbulk.ColumnMappings.Add("Qty", "Qty");
                    objbulk.ColumnMappings.Add("Rate", "Rate");
                    objbulk.ColumnMappings.Add("Amt", "Amount");
                }

                //inserting bulk Records into DataBase 
                objbulk.WriteToServer((DataTable)ViewState["CurrentTable"]);
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        { con.Close(); }

        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('Row inserted');", true);
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        try
        {
            // Creating sql Connection
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginConnectionString"].ConnectionString);
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;

            //Inserting Values into Purchase_Master
            cmd.CommandText = "Insert into Purchase_Master(PurchaseNo,PDate,Total,OtherCharges,GrandTotal) Values ('" + txtPurchaseNo.Text + "', '" + txtDate.Text + "', '" + txtTotal.Text + "','" + txtOtherCharges.Text + "', '" + txtGrandTotal.Text + "')";
            cmd.Parameters.Add("@PurchaseNo", SqlDbType.VarChar).Value = txtPurchaseNo.Text;
            cmd.Parameters.Add("@PDate", SqlDbType.VarChar).Value = txtDate.Text;
            cmd.Parameters.Add("@Total", SqlDbType.VarChar).Value = txtTotal.Text;
            cmd.Parameters.Add("@OtherCharges", SqlDbType.VarChar).Value = txtOtherCharges.Text;
            cmd.Parameters.Add("@GrandTotal", SqlDbType.VarChar).Value = txtGrandTotal.Text;
            int table1 = cmd.ExecuteNonQuery();
            if (table1 == 1)
            { Response.Write("tble one row inserted"); }
            else { Response.Write("tble no row affected"); }
            cmd.Parameters.Clear();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        { con.Close(); }

        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('Purchase Successfully completed');", true);
        ////Inserting Values into Sales_Detail
        cmd.CommandText = "Insert into Sales_Detail(Category,ItemCode,ItemName,Qty,Rate,Amount)  Values ('" + DropDown.Text + "','" + txtItemCode.Text + "', '" + txtItemName.Text + "', '" + txtQty.Text + "', '" + txtRate.Text + "', '" + txtAmount.Text + "')";

        BulkInsertToDataBase();
    }
}

输入值到输出屏幕后。 数据保存到Purchase_Master表,并显示Purchase Successfully completed dailog box。但数据未保存在Purshase_Detail表

错误显示为:给定的ColumnMapping与源或目标中的任何列都不匹配。 enter image description here

0 个答案:

没有答案