मेरे पास यह फ़ॉर्म है जो उपयोगकर्ता को एक कॉम्बोक्सबॉक्स से (कोड - उत्पाद) आइटम चुनने देता है। इनपुट मात्रा और मूल्य और इसे एक सूची में जोड़ें।DataGridViewComboBoxCell: पंक्ति जोड़ने के दौरान चयनित मूल्य कैसे सेट करें?
रूप
private List<Inventory> inventories = new Inventory().read_inventory();
को लोड हो रहा है माल मूल्यों
private void set_drop_down_inventory()
{
cb_inventory.DisplayMember = "name";
cb_inventory.DataSource = inventories;
cb_inventory.ResetText();
cb_inventory.SelectedIndex = -1;
}
के साथ ComboBox स्थापना उपयोगकर्ता द्वारा किसी उत्पाद का चयन करता है, यह एक नया उदाहरण पैदा करेगा।
private void cb_inventory_SelectionChangeCommitted(object sender, EventArgs e)
{
var selected_inventory = (cb_inventory.SelectedItem as Inventory);
sales_order_detail = new Sales_Order_Detail(selected_inventory, 0);
tx_description.Text = selected_inventory.description;
tx_price.Text = selected_inventory.get_price_str();
}
एक बार जब उपयोगकर्ता आइटम जोड़ता है तो यह इस कोड को ट्रिगर करता है।
private void btn_add_item_Click(object sender, EventArgs e)
{
// Set the inputted data into the instance before adding to the list
sales_order_detail.description = tx_description.Text.ToString();
sales_order_detail.quantity = tx_quantity.Value;
sales_order_detail.price = Convert.ToDecimal(tx_price.Text);
// Adding the instances to a List
sales_order.sales_order_details.Add(sales_order_detail);
// Sets the Datagrid to provide the data+
initialize_datagrid(sales_order_detail);
}
यह मैं कैसे datagrid प्रारंभ क्योंकि मैं स्वयं स्तंभ प्रदर्शित करने की जरूरत है - यह वह जगह है जहाँ मैं क्या करना है यकीन नहीं है - मेरा मानना है मैं स्वयं एक नई पंक्ति हर बार एक जोड़ने की जरूरत नहीं है क्योंकि इस datagrid सूची <> घिरा है, इसलिए जो कुछ भी उदाहरण सूची < में जोड़ा जाता है> यह) ग्रिड से जोड़ दिया जाएगा जब मैं dgv.Refresh (गति प्रदान
private void initialize_datagrid(Sales_Order_Detail sales_order_detail)
{
dgv_sales_order_details.Columns.Clear();
dgv_sales_order_details.DataSource = null;
dgv_sales_order_details.Refresh();
dgv_sales_order_details.AutoGenerateColumns = false;
// Set the datasource to the list where the item is added
dgv_sales_order_details.DataSource = sales_order.sales_order_details;
DataGridViewComboBoxColumn product_code_col = new DataGridViewComboBoxColumn();
DataGridViewColumn description_col = new DataGridViewColumn();
DataGridViewColumn quantity_col = new DataGridViewColumn();
DataGridViewColumn price_col = new DataGridViewColumn();
DataGridViewColumn account_col = new DataGridViewColumn();
DataGridViewComboBoxCell product_cell = new DataGridViewComboBoxCell();
DataGridViewTextBoxCell description_cell = new DataGridViewTextBoxCell();
DataGridViewTextBoxCell amount_cell = new DataGridViewTextBoxCell();
product_cell.DisplayMember = "name";
// They have the same Datasource as the combobox above.
product_cell.DataSource = inventories;
product_code_col.CellTemplate = product_cell;
product_code_col.DataPropertyName = nameof(sales_order_detail.inventory.name); //This binds the value to your column
product_code_col.HeaderText = "Code";
product_code_col.Name = "name";
description_col.CellTemplate = description_cell;
description_col.DataPropertyName = nameof(sales_order_detail.description);
description_col.HeaderText = "Description";
description_col.Name = "description";
quantity_col.CellTemplate = amount_cell;
quantity_col.DataPropertyName = nameof(sales_order_detail.quantity);
quantity_col.HeaderText = "Quantity";
quantity_col.Name = "quantity";
quantity_col.DefaultCellStyle.Format = "0.00";
quantity_col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
price_col.CellTemplate = amount_cell;
price_col.DataPropertyName = nameof(sales_order_detail.price);
price_col.HeaderText = "Price";
price_col.Name = "price";
price_col.DefaultCellStyle.Format = "0.00";
price_col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgv_sales_order_details.Columns.Add(product_code_col);
dgv_sales_order_details.Columns.Add(description_col);
dgv_sales_order_details.Columns.Add(quantity_col);
dgv_sales_order_details.Columns.Add(price_col);
dgv_sales_order_details.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
यह वह जगह है उपयोगकर्ता कोई आइटम जोड़ता है परिणाम जब आइटम जोड़ा जाता है लेकिन जैसा कि आप देख सकते हैं कि combobox कॉलम मान प्रदर्शित नहीं किया गया है, तो यह केवल तब दिखाता है जब मैं सह क्लिक करता हूं mbobox कॉलम। और जब मैं सूची के ऊपर combobox में मान बदलता हूं, तो combobox कॉलम में मान भी बदल जाता है। ऐसा लगता है कि वे बंधे हैं।
मेरे लक्ष्य जहां comboboxcolumn प्रदर्शित करता है मैं क्या चयनित और दोहराया चयन बता गया को ठीक करने के लिए datagrid करने के लिए एक पंक्ति जोड़ने के सक्षम होने के लिए है।
कृपया टिप्पणी करता है, तो इसे और अधिक स्पष्टीकरण की जरूरत है तो मैं इसे सही कर सकते हैं। धन्यवाद!
मैं पुन: प्रयोज्य डेटाग्रिड हैंडलर के लिए upvoted। – Binsoi