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