从 Mdi 窗体打开子窗体时,子窗体中存在的 DatagridView 的列索引会更改

本文关键字:窗体 索引 DatagridView Mdi 存在 | 更新日期: 2023-09-27 18:32:58

我有一个 MdiParent 表单,我正在通过以下代码从中打开一个孩子:

private void editCategoryToolStripMenuItem_Click(object sender, EventArgs e)
{
    formHide();
    EditCatagoryGrid objEditCategoryGrid = new EditCatagoryGrid();        
    objEditCategoryGrid.MdiParent = this;
    objEditCategoryGrid.Location = new Point(100, 80);
    objEditCategoryGrid.Show();        
}
public void formHide()
{      
    Form[] form = this.MdiChildren;
    foreach (Form f in form)
    {
        f.Hide();
        //ChangeMdiColor();
    }
}

EditCatagoryGrid中存在datagridview。当我在不使用 mdiform 的情况下打开EditCatagoryGrid表单时,它工作正常,但是当使用 mdiparent 表单时,EditCatagoryGrid中存在的 datagridview 的列索引发生了变化,它不起作用。我一直无法弄清楚这个问题。任何人都可以帮忙吗?

@Desolate感谢您给出的回复,我绑定数据网格视图的代码如下:

    private void EditCatagoryGrid_Load(object sender, EventArgs e)
    {
        bindDataGridView();
        addCategoryComboBoxToDataGridView();
        //closeAllOtherForms();
    }
    public void bindDataGridView()
    {
        objCon = new SqlCeConnection(@"Data Source= E:'Showroom software'Showroom software'SalePurchase.sdf ;Persist Security Info=False;");
        objCon.Open();
        objDa = new SqlCeDataAdapter("select CategoryId   from Category", objCon);
        DataTable dt = new DataTable();
        objDa.Fill(dt);
        dataGridView1.DataSource = dt;
        objCon.Close();
    }
    public void addCategoryComboBoxToDataGridView()
    {
        dataGridView1.Columns.Add(Category);
        Category.Name = "cmbcatagory";
        Category.HeaderText = "Category";
        Category.Width = 150;
        dataGridView1.Columns[1].Width = 100;
        dataGridView1.AllowUserToAddRows = false;
    }

从 Mdi 窗体打开子窗体时,子窗体中存在的 DatagridView 的列索引会更改

最后我解决了问题,EditCatagoryGrid 表单的 onload 事件的函数必须调用 EditCatagoryGrid 表单的

onshow 事件,并将它们从 EditCatagoryGrid 表单的 onload 事件中删除

private void EditCatagoryGrid_Shown(object sender, EventArgs e)
{
    bindDataGridView();
    addCategoryComboBoxToDataGridView();   
}

你的问题很难回答,同时对你的代码没有足够的信息。因此,没有人能具体猜到问题所在。

我最好的建议是调试你的代码。在CategoryEditFormLoadChange事件以及每个关键方法中设置断点,看看发生了什么。

可能的问题:引发某些异常(如 NullReferenceExceptionOutOfRangeExceptionSqlException),并且 UI 不报告异常。