4

table1 からレコードを選択し、datagridview に表示する select ステートメントがあります。

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

まず、データを Data Grid ビューから datatable に次のように移動します。

 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 as で foreach ループを使用して、datatable から 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

これを行う 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を参照してください。

Execute Non Query の詳細については、http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspxを参照してください。

于 2012-10-18T04:05:56.577 に答える
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 に答える