Hi I have tried a lot for this topic, but I didn't get it, please help me working on windows application...c#
whole idea is manually write the data in datagridview and insert the same in database. (Purchase details for POS) I have 4 columns in datagridview, 3rd column is combobox which contains productname, when I select value in productname from dropdown... productid should update automatically in 4th column which is textbox from List"ProductItem" . Here the issue is, when i select value in combobox not automatically updating the values in 4th column. I need your help cellleave method in the below program
public partial class Form1 : Form { AutoCompleteStringCollection scAutoComplete = new AutoCompleteStringCollection();
private void GetProductItems() { productItems.Clear(); productItems.Add(new ProductItem(0, ""));
MySqlCommand cmd = new MySqlCommand("Select distinct productid,productname from retail_store.product;", con); MySqlDataReader dr; con.Open(); dr = cmd.ExecuteReader(); while (dr.Read()) { //scAutoComplete.Add(dr.GetString("productname")); productItems.Add(new ProductItem(dr.GetInt32("productid"), dr.GetString("productname"))); } con.Close();
((DataGridViewComboBoxColumn)dataGridView1.Columns["Column3"]).ValueMember = "ProductId"; ((DataGridViewComboBoxColumn)dataGridView1.Columns["Column3"]).DisplayMember = "ProductName"; ((DataGridViewComboBoxColumn)dataGridView1.Columns["Column3"]).DataSource = productItems; } private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (dataGridView1.CurrentCell.ColumnIndex ==1 && e.Control is TextBox) { TextBox productNameBox = (TextBox)e.Control; productNameBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend; productNameBox.AutoCompleteSource = AutoCompleteSource.CustomSource; productNameBox.AutoCompleteCustomSource = scAutoComplete; } else if (e.Control is TextBox) { TextBox anyOtherBox = (TextBox)e.Control; anyOtherBox.AutoCompleteMode = AutoCompleteMode.None; } else if (dataGridView1.CurrentCell.ColumnIndex == 2 && e.Control is ComboBox){ if (e.Control is DataGridViewComboBoxEditingControl) { ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown; ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems; ((ComboBox)e.Control).AutoCompleteMode = AutoCompleteMode.Suggest; ((ComboBox)e.Control).Validated -= new EventHandler(combo_Validated); ((ComboBox)e.Control).Validated += new EventHandler(combo_Validated); } }
}
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (e.ColumnIndex == 3) { dataGridView1.NotifyCurrentCellDirty(true); //<== THIS LINE FIXES THE ISSUE } }
void combo_Validated(object sender, EventArgs e) { Object selectedItem = ((ComboBox)sender).SelectedItem; DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex]; if (!String.IsNullOrEmpty(col.ValueMember)) dataGridView1.CurrentCell.Value = GetPropValue(selectedItem, col.ValueMember); else dataGridView1.CurrentCell.Value = selectedItem;
public static object GetPropValue(object src, string propName) { if (src == null) return null; return src.GetType().GetProperty(propName).GetValue(src, null); }
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e) {
{ here i need your help.... }
public class ProductItem{ public ProductItem(int prodid, string prodname) { ProductId = prodid; ProductName = prodname; }
int _productid; public int ProductId { get { return this._productid; } set { this._productid = value; } } string _productname; public string ProductName { get { return this._productname; } set { this._productname = value; } }}