jjliu4492
asked on
How do I change the value for a specific row in a datagridview control if the user selects a value from a combobox within the datagridview
I have a VS 2010 C# Windows application, with a datagridview control on the form. Everytime the user selects a different item from the "Task" combobox in the datagridview control, I want the "BudgetedHours" value to change for that row. How would I go this?
Below is the code I have so far.
Below is the code I have so far.
private void AddComboBoxColumns()
{
DataGridViewComboBoxColumn comboboxColumn;
comboboxColumn = CreateComboBoxColumn();
SetAlternateChoicesUsingDataSource(comboboxColumn);
comboboxColumn.HeaderText = "Task";
//comboboxColumn.ValueMember = "TaskID";
dgTime.Columns.Insert(2, comboboxColumn);
dgTime.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgTime_EditingControlShowing);
}
private void SetAlternateChoicesUsingDataSource(DataGridViewComboBoxColumn comboboxColumn)
{
OperationsDataContext dc = new OperationsDataContext();
{
comboboxColumn.DataSource = dc.Tasks_GetByProjectID(Convert.ToInt32(cboTimeProject.SelectedValue));
comboboxColumn.ValueMember = "TaskID";
comboboxColumn.DisplayMember = "TaskDescription";
}
}
private void dgTime_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{
// Remove an existing event-handler, if present, to avoid
// adding multiple handlers when the editing control is reused.
combo.SelectedIndexChanged -=
new EventHandler(ComboBox_SelectedIndexChanged);
// Add the event handler.
combo.SelectedIndexChanged +=
new EventHandler(ComboBox_SelectedIndexChanged);
}
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
//((ComboBox)sender).BackColor = (Color)((ComboBox)sender).SelectedItem;
using (OperationsDataContext dc = new OperationsDataContext())
{
//dc.Tasks.InsertOnSubmit(del);
//dc.SubmitChanges();
//MessageBox.Show("Deliverable successfully saved.", "Deliverable", MessageBoxButtons.OK);
var hours = dc.Tasks_GetByTaskID(Convert.ToInt32(((ComboBox)sender).SelectedValue));
DataGridViewColumn col = (DataGridViewColumn)dgTime.Columns["BudgetedHours"];
foreach (var hour in hours)
{
col.DataPropertyName = Convert.ToString(hour.OriginalBudget);
}
}
}
private DataGridViewComboBoxColumn CreateComboBoxColumn()
{
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
{
//if (!isNewRow)
//{
column.DataPropertyName = "TaskID";
//}
column.HeaderText = "Task";
column.DropDownWidth = 160;
column.Width = 160;
column.MaxDropDownItems = 3;
column.FlatStyle = FlatStyle.Flat;
}
return column;
}
DatagridviewControl.png
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER