2011-01-09 4 views
0

클릭 이벤트 단추에 데이터베이스 레코드가 채워지는 내 양식에 DataGridView가 있습니다. 런타임에 프로그래밍 방식으로 다른 두 열 템플릿을 채우려면 어떻게해야합니까?DataGridView 열 템플릿

두 개의 열 템플릿 ...이 클릭 이벤트 버튼을 데이터베이스에서 채워 때 어떻게 생겼는지 내 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에 무엇 런타임에 다른 두 개의 열을 채우는 것처럼 보입니다.

================================================================= 
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 
================================================================= 

다음은 datagridvie를 생성하는 코드입니다. ... 클릭 이벤트 버튼을 데이터베이스에서 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 쿼리를 업데이트하여 두 테이블을 조인하고 4 개의 열을 모두 가져와야합니다. –

+0

안녕하세요 Brian, 추가 열에 대한 데이터는 어디에도 없습니다. 런타임에 생성해야합니다. – 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) 
... 

추 신 : dataAdapter가 자동으로 사용되면 연결시 .Open() 또는 Close()를 호출 할 필요가 없습니다.

+0

대단히 고맙습니다. 내 문제를 해결해 주셔서 감사합니다. 다시 한 번 감사드립니다. – LAPECI

관련 문제