DataGridView列模板

时间:2011-01-09 18:38:59

标签: c# .net

我的Form上有一个DataGridView,它在click事件按钮上填充了数据库记录。 如何在运行时以编程方式填充另外两列模板?

两列模板库存数量状态 这是我的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
=================================================================

以下是在点击事件按钮上从数据库生成datagridview的代码...

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

1 个答案:

答案 0 :(得分:0)

如果您希望在运行时添加列(尽管库存中的数量听起来像数据库列),那么最简单的方法是将它们直接添加到数据集中。

    ...    
    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(),因为它是自动完成的。