加载datagridview并添加组合框
这里是我用来创建一个datagridview,然后添加2组合框的方法。三个DataTables从其他类加载。加载datagridview并添加组合框
public void GetWorkorderItems()
{
Workorders wo = new Workorders();
ItemTable = wo.LoadWorkorderItemsTable(_ID);
this.datagridWorkorderItems.DataSource = ItemTable;
this.datagridWorkorderItems.AutoGenerateColumns = true;
this.datagridWorkorderItems.Columns[0].Visible = false;
this.datagridWorkorderItems.Columns[1].HeaderText = "Qty";
this.datagridWorkorderItems.Columns[1].Width = 100;
this.datagridWorkorderItems.Columns[2].HeaderText = "Part";
this.datagridWorkorderItems.Columns[2].Width = 100;
this.datagridWorkorderItems.Columns[3].HeaderText = "Labor";
this.datagridWorkorderItems.Columns[3].Width = 100;
this.datagridWorkorderItems.Columns[4].HeaderText = "Price";
this.datagridWorkorderItems.Columns[4].Width = 150;
this.datagridWorkorderItems.Columns[5].HeaderText = "Description";
this.datagridWorkorderItems.Columns[5].Width = 150;
Parts part = new Parts();
DataTable partdata = new DataTable();
partdata = part.LoadPartTable();
DataGridViewComboBoxColumn pcb = (DataGridViewComboBoxColumn)this.datagridWorkorderItems.Columns[2];
pcb.DataSource = partdata;
pcb.DisplayMember = "PartName";
pcb.ValueMember = "PartID";
datagridWorkorderItems.Columns.Add(pcb);
Labor labor = new Labor();
DataTable data = new DataTable();
data = labor.LoadLaborTable();
DataGridViewComboBoxColumn cb = (DataGridViewComboBoxColumn)this.datagridWorkorderItems.Columns[3];
cb.DataSource = data;
cb.DisplayMember = "LaborItem";
cb.ValueMember = "LaborID";
datagridWorkorderItems.Columns.Add(cb);
}
当代码到达创建DataGridViewComboBox的对象的代码退出的方法和不添加或加载组合框。也没有例外抛出。
任何帮助?
编辑* * ** DataGridViewTextBoxColumn COL0 =(DataGridViewTextBoxColumn)this.datagridWorkorderItems.Columns [0]; this.datagridWorkorderItems.Columns [0] .DataPropertyName =“WOItemID”; this.datagridWorkorderItems.Columns [0] .Visible = false; this.datagridWorkorderItems.Columns.Add(col0);
DataGridViewTextBoxColumn col1 = (DataGridViewTextBoxColumn)this.datagridWorkorderItems.Columns[1];
this.datagridWorkorderItems.Columns[1].DataPropertyName = "Quantity";
this.datagridWorkorderItems.Columns[1].HeaderText = "Qty";
this.datagridWorkorderItems.Columns[1].Width = 100;
this.datagridWorkorderItems.Columns.Add(col1);
DataGridViewComboBoxColumn pcb = (DataGridViewComboBoxColumn)this.datagridWorkorderItems.Columns[2];
pcb.DataSource = partdata;
pcb.DisplayMember = "PartName";
pcb.ValueMember = "PartID";
datagridWorkorderItems.Columns.Add(pcb);
如果我理解,这可能是构建列的方式。
***固定码,工程* ** * **
public void GetWorkorderItems()
{
Workorders wo = new Workorders();
ItemTable = wo.LoadWorkorderItemsTable(_ID);
Parts part = new Parts();
DataTable partdata = new DataTable();
partdata = part.LoadPartTable();
Labor labor = new Labor();
DataTable data = new DataTable();
data = labor.LoadLaborTable();
this.datagridWorkorderItems.AutoGenerateColumns = false;
DataGridViewTextBoxColumn col0 = new DataGridViewTextBoxColumn();
col0.DataPropertyName = "WOItemID";
col0.Visible = false;
this.datagridWorkorderItems.Columns.Add(col0);
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
col1.DataPropertyName = "Quantity";
col1.HeaderText = "Qty";
col1.Width = 100;
this.datagridWorkorderItems.Columns.Add(col1);
DataGridViewComboBoxColumn col2 = new DataGridViewComboBoxColumn();
col2.DataPropertyName = "PartID";
col2.DataSource = partdata;
col2.DisplayMember = "PartName";
col2.ValueMember = "PartID";
col2.HeaderText = "Part";
datagridWorkorderItems.Columns.Add(col2);
DataGridViewComboBoxColumn col3 = new DataGridViewComboBoxColumn();
col3.DataPropertyName = "LaborID";
col3.DataSource = data;
col3.DisplayMember = "LaborItem";
col3.ValueMember = "LaborID";
col3.HeaderText = "Labor";
datagridWorkorderItems.Columns.Add(col3);
DataGridViewTextBoxColumn col4 = new DataGridViewTextBoxColumn();
col4.DataPropertyName = "Price";
col4.HeaderText = "Price";
col4.Width = 100;
this.datagridWorkorderItems.Columns.Add(col4);
DataGridViewTextBoxColumn col5 = new DataGridViewTextBoxColumn();
col5.DataPropertyName = "Description";
col5.HeaderText = "Description";
col5.Width = 100;
this.datagridWorkorderItems.Columns.Add(col5);
this.datagridWorkorderItems.DataSource = ItemTable;
}
尝试是这样的:
public ExampleForm()
{
InitializeComponent();
datagridWorkorderItems.AutoGenerateColumns = false;
DataGridViewTextBoxColumn qtyColumn = new DataGridViewTextBoxColumn();
qtyColumn.DataPropertyName = "Qty";
qtyColumn.HeaderText = "Qty";
datagridWorkorderItems.Columns.Add(qtyColumn);
DataGridViewComboBoxColumn partColumn = new DataGridViewComboBoxColumn();
partColumn.Items.Add(new Part() { ID = 0, PartName = "Tire" });
partColumn.Items.Add(new Part() { ID = 1, PartName = "Motor" });
partColumn.HeaderText = "Part";
partColumn.DataPropertyName = "PartID";
partColumn.ValueMember = "ID";
partColumn.DisplayMember = "PartName";
datagridWorkorderItems.Columns.Add(partColumn);
List<WorkOrder> workOrders = new List<WorkOrder>();
workOrders.Add(new WorkOrder() { Qty = 0, PartID = 0});
workOrders.Add(new WorkOrder() { Qty = 2, PartID = 1});
datagridWorkorderItems.DataSource = workOrders;
}
}
public class WorkOrder
{
public int Qty { get; set; }
public int PartID { get; set; }
}
public class Part
{
public int ID { get; set; }
public string PartName { get; set; }
}
我明白你在做什么,这很有道理。如果我需要绑定到DataTable并从数据源加载我的组合框,该怎么办?简单地将datagridview绑定到数据表生成列?如果我在代码中创建列,如何告诉datagridview来订购新列?它是否按列创建顺序添加并显示列集合? – Ryan
只要您将AutoGenerateColumns设置为false,它们就不会生成。你可以绑定一个DataTable,只要确保“DataPropertyName”被设置为feild来从中提取数据。当您在组合框项目上使用数据绑定时,将项目值设置为“ValueMember”(您将在DataPropertyName设置的字段中存储的值)和“DisplayMemeber”设置为项目将显示的文本。现在我要出去吃午饭了,我会在一小时后回来看看你是否有更多问题。 –
这很酷,这是有道理的。我会把它连接起来并回传。 – Ryan
好了一件事我看到,立即脱颖而出的是,你是au生成列(除非你需要文本框,这通常是一件危险的事情)。生成列之后,然后选择其中一列(不检查其类型)并将其转换为datagridview列。你应该给我们一个“if(col是DataGridViewComboBoxColumn){...}”以避免错误。我愿意打赌它失败,因为你正在阅读一个现有的专栏。尝试在不自动生成列的情况下执行此操作。 –
谢谢本杰明·危险约翰逊。所以基本上,当我为列设置属性时,应该事先生成所有列类型?这似乎是有道理的。 – Ryan
坚持,让我看看我是否可以编程一个答案。 –