4

我有一个 select 语句,它从 table1 中选择记录并显示在 datagridview 中,

如何在 select 语句之后将 datagridview 中显示的数据复制到 table2。下面是我从 table1 中选择项目的代码

     public void getdata(){
        if (txt_Barcode.Text== "" )
        {
            MessageBox.Show ("Please fill in something");
        }
        for (int i = 0; i < dgv_Detail.Rows.Count +1; i++)
        {

            da = new SqlDataAdapter("select * from asset where asset_no='" + txt_Barcode.Text + "'", conn);

        }
             da.Fill(Assetdt);         
        }



    #endregion

    public void fillds()
    {
        dgv_Detail.DataSource = Assetdt;
    }

激活事件

 private void txt_Barcode_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.Enter)
        {

            getdata();
            fillds();

            insertbar();

        }
    }

没有人知道怎么做?

4

3 回答 3

2

首先将数据从数据网格视图移动到数据表:

 DataTable dt = new DataTable(); 
        DataColumn[] dcs = new DataColumn[]{}; 

        foreach (DataGridViewColumn c in dgv.Columns) 
        { 
            DataColumn dc = new DataColumn(); 
            dc.ColumnName = c.Name; 
            dc.DataType = c.ValueType; 
            dt.Columns.Add(dc); 

        } 

        foreach (DataGridViewRow r in dgv.Rows) 
        { 
            DataRow drow = dt.NewRow(); 

            foreach (DataGridViewCell cell in r.Cells) 
            { 
                drow[cell.OwningColumn.Name] = cell.Value; 
            } 

            dt.Rows.Add(drow); 
        } 

然后使用 datable.rows 上的 foreach 循环将数据从数据表移动到 sql 表:

foreach(DataRow dr in dt.Rows)
{
Product product = new Product(); // make seperate class with same feilds as sql table
//Get the column values 
product.productId = dr["productId"];
 product.productName = dr[ProductName"];
 Product.Insert();//Insert will have inserting records into the dabtase
}

产品是单独的类:

public class Product
{
   public int productId { get; set; }
   public string productName { get; set; }
}
于 2012-10-18T04:21:12.767 回答
1

使用 SqlCommandBuilder 生成插入命令

        DataTable dtSource = null;
        //populate or assign dtSouurce here

        string connectionString = null;
        //assign your connection string here

        var tableName = "TABLE2";

        using (var connection = new SqlConnection(connectionString))
        {
            var adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand(tableName, connection);
            adapter.SelectCommand.CommandType = CommandType.TableDirect;
            var builder = new SqlCommandBuilder(adapter);

            connection.Open();

            var dataSet = new DataSet();
            adapter.FillSchema(dataSet, SchemaType.Mapped);

            builder.GetInsertCommand();

            foreach (DataRow row in dtSource.Rows)
            {
                dataSet.Tables[tableName].Rows.Add(row.ItemArray);
                //dataSet.Tables[tableName].Rows.Add(new object[]{ row.ItemArray[0], row.ItemArray[2], "Some Else Values" });
            }

            adapter.Update(dataSet, tableName);

            connection.Close();
        }

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx

于 2012-10-18T04:34:18.287 回答
1

一种方法是在显示数据后运行“SELECT INTO Table2”查询。

实际上,在 Datagridview 上放置数据后,您无需从中读取数据,而是可以重新使用您的查询。

for (int i = 0; i < dgv_Detail.Rows.Count +1; i++)
{
string sqlQuery = "FROM asset where asset_no='" + txt_Barcode.Text + "'";
string sqlInsertQuery = "SELECT INTO Table2 " + sqlQuery;
da = new SqlDataAdapter("SELECT * " + sqlQuery, conn);
//Run ExecuteNonQuery using sqlInsertQuery    
}

阅读更多关于 SELECT INTO http://www.w3schools.com/sql/sql_select_into.asp

阅读更多关于执行非查询http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

于 2012-10-18T04:05:56.577 回答