Колонка управления datagridview показывает только значений ячеек на физическую кнопку
У меня есть метод под названием Search(), его задача состоит в том, чтобы получить много заказов на покупку и показать их в datagridview в виде BindingList, но добавить дополнительный столбец вручную. Проблема в том, что все работает правильно, когда я физически нажимаю кнопку поиска, однако когда я вызываю метод в событии загрузки формы, он будет работать, за исключением того, что дополнительный столбец, который я добавил вручную, не показывает значения своих ячеек, он будет показывать их только после того, как я нажму кнопку.
private void Search() { dgvResults.DataSource = null; List<PurchaseOrder> pos = new List<PurchaseOrder>(); // Check if search criteria is valid bool searchCriteriaOk = false; if (rdoById.Checked && txtSearch.Text.Length == 8) { pos = service.GetPurchaseOrders(1, LoginData.EmployeeId, Convert.ToInt32(txtSearch.Text), DateTime.Today, DateTime.Today, null); searchCriteriaOk = true; } else if (rdoById.Checked && txtSearch.Text.Length != 8) { MessageBox.Show("The purchase order id must be 8 digits long"); } else if (rdoByDate.Checked && dtpStart.Value < dtpEnd.Value) { POStatus? status = null; if (rdoPending.Checked) { status = POStatus.Pending; } if (rdoClosed.Checked) { status = POStatus.Closed; } pos = service.GetPurchaseOrders(2, LoginData.EmployeeId, 0, dtpStart.Value, dtpEnd.Value, status); searchCriteriaOk = true; } else if (rdoByDate.Checked && !(dtpStart.Value < dtpEnd.Value)) { MessageBox.Show("Start date must be less than end date"); } if (searchCriteriaOk) { if (pos.Count > 0) { if (LoginData.EmployeeType == EmployeeType.RegularEmployee || LoginData.EmployeeType == EmployeeType.HREmployee) { foreach (var po in pos.ToList()) { if (po.EmployeeId != LoginData.EmployeeId) { pos.Remove(po); } } } dgvResults.DataSource = new BindingList<PurchaseOrder>(pos); dgvResults.Columns["TotalAfterTax"].DefaultCellStyle.Format = "c2"; foreach (DataGridViewColumn column in dgvResults.Columns) { if (column.Name != "PurchaseOrderId" && column.Name != "CreationDate" && column.Name != "TotalAfterTax") { column.Visible = false; } if (column.Name == "PurchaseOrderId") { column.HeaderText = "PO Number"; } if (column.Name == "CreationDate") { column.HeaderText = "Date"; } if (column.Name == "TotalAfterTax") { column.HeaderText = "Total"; } } if (dgvResults.Columns["PoItems"] != null) { dgvResults.Columns.Remove("PoItems"); } dgvResults.Columns.Add("PoItems", "Items"); foreach (DataGridViewRow row in dgvResults.Rows) { string itemToAddToDgv = ""; int poId = Convert.ToInt32(row.Cells["PurchaseOrderId"].Value); foreach (PurchaseOrder purchaseOrder in pos.ToList()) { if (purchaseOrder.PurchaseOrderId == poId) { foreach (Item item in purchaseOrder.Items.ToList()) { itemToAddToDgv += " *" + item.Name; } } } row.Cells["PoItems"].Value = itemToAddToDgv; } dgvResults.Rows[0].Selected = true; } else { MessageBox.Show("No Purchase Orders found"); } } }
Что я уже пробовал:
Я даже пытался вызвать метод .PerformClick() при загрузке формы, но он не работает
Maciej Los
Вы пытались отладить свою программу, чтобы выяснить, почему процедура поиска не запускается?
Richard MacCutchan
Вы должны добавить различные поля в свой источник привязки, прежде чем привязывать его к представлению.