2011-01-09 5 views
0

私は、クリックイベントボタンでデータベースレコードを取り込んでいるフォーム上にDataGridViewを持っています。 実行時にプログラムで別の2つの列テンプレートを作成するにはどうすればよいですか?DataGridView列テンプレート

2列テンプレートは...これは、クリックイベントのボタン上のデータベースから移入するときのように見えるものに私のDataGridViewである

=============================================================== 
FoodName  FoodType  Qty In Stock  Status 
=============================================================== 
Olives   Starter      
Soup   Starter      
Caprese  Starter 
Bruschetta  Starter 
Mushroom  Starter 
Antipasto  Starter 
Scallops  Starter 
Calamari  Starter 
Crab Avocado Starter 
Pizza Bread  Starter 
=============================================================== 

証券とステータス数量であり、これはDataGridViewのあるもの私はコードがdatagridvieを生成している実行時ここで

================================================================= 
FoodName  FoodType  Qty In Stock  Status 
================================================================= 
Olives   Starter  0    Allways On Stock 
Soup   Starter  0    Allways On Stock 
Caprese  Starter  0    Allways On Stock 
Bruschetta  Starter  0    Allways On Stock 
Mushroom  Starter  0    Allways On Stock 
Antipasto  Starter  0    Allways On Stock 
Scallops  Starter  0    Allways On Stock 
Calamari  Starter  0    Allways On Stock 
Crab Avocado Starter  0    Allways On Stock 
Pizza Bread  Starter  0    Allways On Stock 
================================================================= 

で、他の2つの列を埋めるように見てみたいですクリックイベントのボタン上のデータベースからのw ...

private DataGridViewTextBoxColumn ColFoodQtyStock = new DataGridViewTextBoxColumn(); 
     private DataGridViewTextBoxColumn ColFoodStatus = new DataGridViewTextBoxColumn(); 

     private void cmdStarters_Click(object sender, EventArgs e) 
     { 
      OleDbConnectionStringBuilder connBuilder = new OleDbConnectionStringBuilder(); 
      connBuilder.DataSource = @"C:\Users\AP_AE\Desktop\DTPOS_APP\DataBase\DtposMenu.accdb"; 
      connBuilder.Provider = "Microsoft.ACE.OLEDB.12.0"; 
      connBuilder.Add("Jet OLEDB:Engine Type", "5"); 

      // Food SQL Query 
      string foodTypeSql = @"SELECT FoodName, FoodType FROM Food WHERE FoodType = @foodType"; 
      using (OleDbConnection conn = new OleDbConnection(connBuilder.ConnectionString)) 
      { 
       dataGridView1.Columns.Clear(); 
       dataGridView1.RowTemplate.Height = 60; 
       //====================================\\ 
       dataGridView1.Visible = true; 
       dataGridView2.Visible = false; 
       try 
       { 
        OleDbCommand foodsCommand = new OleDbCommand(foodTypeSql, conn); 
        OleDbParameter foodType = foodsCommand.Parameters.Add("@foodType", OleDbType.VarChar, 15); 
        OleDbDataAdapter foodsDa = new OleDbDataAdapter(foodsCommand); 
        //DataRow dr; 
        DataSet ds = new DataSet(); 
        conn.Open(); 
        foodType.Value = "Starter"; 
        foodsDa.Fill(ds, "Food_table"); 

        conn.Close(); 
        dataGridView1.DataSource = ds; 
        dataGridView1.DataMember = "Food_table"; 

        dataGridView1.Columns.AddRange(ColFoodQtyStock, ColFoodStatus); 

        DataGridViewCellStyle dataGridViewCellStyle1 = new DataGridViewCellStyle(); 
        this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; 
        dataGridViewCellStyle1.Font = new Font("Verdana", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 

        this.dataGridView1.Columns[0].Width = 420; 
        this.dataGridView1.Columns[1].Width = 180; 
        this.dataGridView1.Columns[2].Width = 300; 
        this.dataGridView1.Columns[3].Width = 308; 

        // ColStatus 
        ColFoodStatus.HeaderText = "Status"; 
        ColFoodStatus.Name = "ColFoodStatus"; 

        // ColQtyStock 
        ColFoodQtyStock.HeaderText = "Quantity In Stock"; 
        ColFoodQtyStock.Name = "ColFoodQtyStock"; 

       } 
       catch (Exception ex) 
       { 
        MessageBox.Show("Error: " + ex); 
       } 
      } 
     } 

誰かが私はこの問題を解決するために、私のクリックイベントのボタンにコードを修正するために助けてもらえてください事前に

おかげ

lapeci

+0

これらの追加列のデータはどこから得られますか?それらがデータベースの別のテーブルにある場合は、SQLクエリを更新して2つのテーブルを結合し、4つの列すべてをインポートする必要があります。 –

+0

こんにちはブライアン、彼らはどこから来ていない追加の列のデータは、実行時に生成する必要があります。 – LAPECI

+0

こんにちはWaleed、彼らはどこから来ていない追加の列のデータは、実行時に生成する必要があります。 – LAPECI

答えて

0

実行時に列を追加する場合(StockのQtyはデータベース列のように聞こえますが)、最も簡単な方法は、それらをデータセットに直接追加することです。

...  
    foodsDa.Fill(ds, "Food_table"); 

    //add extra column structures to dataset 
    ds.Tables["Food_table"].Columns.Add(new DataColumn("ColFoodQtyStock", System.Type.GetType("System.Int32"))); 
    ds.Tables["Food_table"].Columns.Add(new DataColumn("ColFoodStatus", System.Type.GetType("System.String"))); 
    //loop through all the rows and add the data to the new columns dynamically 
    for (int i = 0; i < ds.Tables["Food_table"].Rows.Count; i++) 
    { 
     ds.Tables["Food_table"].Rows[i]["ColFoodQtyStock"] = 0; 
     ds.Tables["Food_table"].Rows[i]["ColFoodStatus"] = "Always On Stock"; 
    } 

    dataGridView1.DataSource = ds; 
    dataGridView1.DataMember = "Food_table"; 

    DataGridViewCellStyle dataGridViewCellStyle1 = new DataGridViewCellStyle(); 
    dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; 
    dataGridViewCellStyle1.Font = new Font("Verdana", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 

    dataGridView1.Columns[0].Width = 420; 
    dataGridView1.Columns[1].Width = 180; 
    dataGridView1.Columns[2].Width = 300; 
    dataGridView1.Columns[3].Width = 308; 
} 
catch (Exception ex) 
... 

PS:DataAdapterを自動的に使用する場合は、接続時に.Open()またはClose()を呼び出す必要はありません。

+0

大変ありがとうございました。 – LAPECI

関連する問題