当我从另一个窗体打开它时,组合框始终显示第一个值,而不是来自 DataGrid 的值



我有一个包含两个组合框(cmbSection,cmbGrade(和两个文本框(txtName,txtSectionSize(的表单我想从组合框和 txtSectionSize 中获取文本并将其放入 txtName 中,所以我的代码锁像这样

 public partial class FRM_Item : Form
 {
    //public string State = "Add";
    BL.CLS_Item prd = new BL.CLS_Item();
    public FRM_Item()
    {
        InitializeComponent();
        cmbSection.DataSource = prd.Get_All_Items();
        cmbSection.DisplayMember = "Name_SectionType";
        cmbSection.ValueMember = "ID_SectionType";
        cmbGrade.DataSource = prd.Get_All_Grade();
        cmbGrade.DisplayMember = "Name_Grade";
        cmbGrade.ValueMember = "ID_Grade";
    }
private void cmbSection_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.txtName.Text = cmbSection.Text + txtSectionSize.Text + "-" + cmbGrade.Text;
    }
    private void cmbGrade_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.txtName.Text = cmbSection.Text + txtSectionSize.Text + "-" + cmbGrade.Text;
    }
    private void txtSectionSize_TextChanged(object sender, EventArgs e)
    {
        this.txtName.Text = cmbSection.Text + txtSectionSize.Text + "-" + cmbGrade.Text;
    }

当我打开表单时,我在 txtName 中获取 System.Data.DataRowView,但是当我从组合框中拾取任何文本时,我在文本框中获得了正确的值我通过移动此代码以形成加载来解决此问题

        private void FRM_Item_Load(object sender, EventArgs e)
    {
        cmbSection.DataSource = prd.Get_All_Items();
        cmbSection.DisplayMember = "Name_SectionType";
        cmbSection.ValueMember = "ID_SectionType";
        cmbGrade.DataSource = prd.Get_All_Grade();
        cmbGrade.DisplayMember = "Name_Grade";
        cmbGrade.ValueMember = "ID_Grade";
    }

当我在另一个表单中从按钮打开此表单时,我现在遇到的问题组合框始终显示第一个值,而不是数据网格中的值

private void btnEdit_Click(object sender, EventArgs e)
    {
        FRM_Item frm = new FRM_Item();
        frm.txtName.Text = this.dataGridView1.CurrentRow.Cells[1].Value.ToString();
        frm.cmbSection.Text = this.dataGridView1.CurrentRow.Cells[2].Value.ToString();
        frm.txtSectionSize.Text = this.dataGridView1.CurrentRow.Cells[3].Value.ToString();
        frm.cmbGrade.Text = this.dataGridView1.CurrentRow.Cells[4].Value.ToString();
        frm.ShowDialog();
    }

我如何解决这个问题

在分配组合框之前填充它们。 现在,它倒退了。

我建议将此代码移动到子窗体构造函数,或者在尝试在父窗体中分配属性之前可以调用的方法。

    cmbSection.DataSource = prd.Get_All_Items();
    cmbSection.DisplayMember = "Name_SectionType";
    cmbSection.ValueMember = "ID_SectionType";
    cmbGrade.DataSource = prd.Get_All_Grade();
    cmbGrade.DisplayMember = "Name_Grade";
    cmbGrade.ValueMember = "ID_Grade";
就事件而言,如果您将代码放在构造函数中,如果您没有完成构造函数,或者设计器中

没有事件并在填充组合框后在构造函数中显式执行此操作,则可以使用布尔属性不运行事件代码。

相关内容

最新更新