Я создаю приложение, в котором datagridview имеет один комбинированный список и несколько текстовых полей
В сетевом представлении, когда я выбираю вручную значение комбинированного списка данных, значение Текстовое поле заполняется
Но datagridview заполняется bindingsource, и значение datagridviewcombobox выбирается, но значение текстового поля пусто
Пример как показано ниже
Значение поля со списком, выбранное пользователем, текстовое поле Имя учетной записи заполнено
Значение поля со списком, выбранное bindingsource (динамически), текстовое поле «Имя учетной записи» пусто
Ниже мой код
int journalID = 0;
public Add(int id = 0)
{
BindControls();
journalID = id;
}
private async void BindControls()
{
try
{
if (journalID > 0)
{
List<JournalAccountViewModel> list = await new JournalModel().GetDetailById(journalID);
for (int i = 0; i <= list.Count - 1; i++)
{
bindingSource1.Add(list[i]);
}
}
else
{
bindingSource1.Add(new JournalAccountViewModel());
bindingSource1.List.Clear();
}
dgvJournal.AutoGenerateColumns = false;
dgvJournal.AllowUserToAddRows = true;
dgvJournal.AutoSize = true;
dgvJournal.DataSource = bindingSource1;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Rule", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void dgvJournal_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
try
{
if (dgvJournal.CurrentCell.ColumnIndex == dgvJournal.Columns[colCredit.Name].Index) //Desired Column
{
TextBox tb = e.Control as TextBox;
if (tb != null)
{
tb.KeyPress += new KeyPressEventHandler(txtNumeri_KeyPress);
}
}
if (dgvJournal.CurrentCell.ColumnIndex == dgvJournal.Columns[ColDebit.Name].Index) //Desired Column
{
TextBox tb = e.Control as TextBox;
if (tb != null)
{
tb.KeyPress += new KeyPressEventHandler(txtNumeri_KeyPress);
}
}
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{
combo.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
combo.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Rule", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (((ComboBox)sender).SelectedItem != null)
{
AccountViewModel account = (AccountViewModel)((ComboBox)sender).SelectedItem;
var currentcell = dgvJournal.CurrentCellAddress;
DataGridViewTextBoxCell cel = (DataGridViewTextBoxCell)dgvJournal.Rows[currentcell.Y].Cells[ColAccountName.Name];
cel.Value = account.Name;
}
else
{
((ComboBox)sender).SelectedIndex = 0;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Rule", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void txtNumeri_KeyPress(object sender, KeyPressEventArgs e)
{
try
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
// only allow one decimal point
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Rule", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Подскажите, пожалуйста, как заполнить текстовое поле, если значение поля со списком установлено программно.