0

ここに来るのは初めてなので、私の問題を説明するために最善を尽くします。

1 つのフォームがあり、そのフォームには 2 つのデータグリッドがあります。それらをdg1dg2と呼びましょう。

dg1は dataadapter を介して mssql データベースに接続されていますが、dg2はそうではありません。製品に関する dg1情報があるとします。

  • 製品番号
  • 説明
  • 価格

dg2には、bill と呼ばれるものがあります。だからdg2には列があります

  • 請求書ID
  • 口座番号ID
  • 製品番号
  • 説明
  • 価格

billID が主キーであると予想されるかもしれませんが、他のすべては外部です。dg1はデータベースからのデータで満たされているため、ユーザーが dg1 の行をクリックしてdg2にデータを渡すときに、 dg2からの他のデータを何らかの方法で挿入する必要があります(とにかく私の問題です)。私はデータベーステーブルの請求書を持っていますが、データを 1 つのデータから別のデータに渡しcelldoubleclickevent、そのすべてのデータをデータベースの請求書テーブルに保存したいと考えています。

public void loadData() 
{ 
    try 
    { 
        SqlConnection con1 = getConnection();
        con1.Open();
        SqlCommand com1 = new SqlCommand();
        com1.Connection = con1;
        com1.CommandType = CommandType.Text;
        com1.CommandText = "select * from bill";
        SqlDataReader reader = com1.ExecuteReader();
        dataGridView2.Rows.Clear();
        while (reader.Read()) 
        {

            dataGridView1.AutoGenerateColumns = false; 
            dataGridView2.Rows.Add();
            dataGridView2.Rows[i].Cells[0].Value = reader["billID"].ToString();
            dataGridView2.Rows[i].Cells[1].Value = reader["acountnumberID"].ToString(); 
            dataGridView2.Rows[i].Cells[2].Value = reader["productID"].ToString();
            dataGridView2.Rows[i].Cells[3].Value = reader["Quantity"].ToString();
            dataGridView2.Rows[i].Cells[4].Value = reader["Description"].ToString();
            dataGridView2.Rows[i].Cells[5].Value = reader["price"].ToString();
            i++; 
        }
    }

どうも

4

1 に答える 1

0

ここにはいくつかのステップがあります。

まず、dg1 から情報を取得する必要があります。イベント引数のプロパティを使用してこれを行うことができRowIndexますが、ユーザーがヘッダーをダブルクリックしていないことを確認する必要があります。

//This will depend on how the grid is bound
var dg1ProductID = GetProductID(dg1.datasource, e.RowIndex);

このメソッドの本体は非常に単純です

private void GetProductID(Int32 RowIndex)
{
    return (Int32)(dg1.Rows[RowIndex].Cells[0]);
}

次に、情報を dg2 に入れる必要があります。

var newRow = dataGridView2.Rows.Add();

var bill = dataSet1.Tables[0].NewRow();
var accountNumber = GetCurrentAccountNumber();
var userQuantity = AskUserForQuantity();

dataGridView2.Rows[newRow].Cells[0].Value = -1;
dataGridView2.Rows[newRow].Cells[1].Value = accountNumber;
dataGridView2.Rows[newRow].Cells[2].Value = dg1ProductID;
dataGridView2.Rows[newRow].Cells[3].Value = userQuantity;
dataGridView2.Rows[newRow].Cells[4].Value = dg1Description;
dataGridView2.Rows[newRow].Cells[5].Value = dg1price;

請求書IDは主キーなので、自動的に入力されると思います。

3番目に、データを請求書に保存したいのですが、これをダブルクリックイベントで行うか、別のボタンクリックイベントで行うかはわかりません(ユーザーがOK.

ダブルクリックで実行している場合は、追加したばかりの同じ値をメソッドに渡して、それらをデータベースに保存します。

Save(accountNumber, dg1ProductID, userQuantity, dg1Description, dg1price);

そうでない場合は、データを列挙してセル値から保存できます

foreach(DataGridViewRow Row in dg2.Rows)
{
    if (Row.Cells[0] == -1)
    {
        Save(Row.Cells[1], Row.Cells[2], Row.Cells[3], Row.Cells[4], Row.Cells[5]);
    }
}
于 2013-03-28T13:48:37.587 に答える