【问题标题】:Winform display bugWinform显示错误
【发布时间】:2017-05-26 09:58:47
【问题描述】:

我在 1(或 2)年前开发了一个基于 .NET Framework 4.5 的 Winform 应用程序。

有一些用户遇到了一个奇怪的错误,即控制组没有出现。我从来没有成功地重现这个错误来修复它。 它很少发生。在大约 200 位用户中,目前只有一位遇到此问题。

应该是这样的:

问题如下:

有人有什么建议吗?

编辑:在第一个屏幕截图中,您可以看到“选定客户”组控件。当用户点击gridview中的一行时,相关的客户就会显示在那里,可以点击“Select this customer”按钮。

在第二个屏幕截图中,您可以看到 gridview 溢出到底部。未显示“选定客户”部分。 (但“显示隐藏的客户”复选框仍然显示)

这是加载gridview的方法:

private void SetUpCustomersGridView()
    {
        if (chkbx_showHiddenCustomers.Checked)
        {
            dgv_customer.DataSource = _mySqlCeEngine.GetAllCustomers();
        }
        else
        {
            dgv_customer.DataSource = _mySqlCeEngine.GetVisibleCustomers();
        }

        gv_customer.Columns[0].Caption = "ID";
        gv_customer.Columns[1].Caption = "Name";
        gv_customer.Columns[2].Caption = "Address";
        gv_customer.Columns[3].Caption = "City";
        gv_customer.Columns[4].Caption = "Zip Code";
        gv_customer.Columns[5].Caption = "Country Code";
        gv_customer.Columns[6].Caption = "Cluster";
        gv_customer.Columns[7].Caption = "Magellan Party/Account/Site ID/Account Site ID";
        gv_customer.BestFitColumns();

        gv_customer.OptionsFilter.AllowFilterEditor = false;
        gv_customer.OptionsView.ShowAutoFilterRow = true;
        foreach (DevExpress.XtraGrid.Columns.GridColumn col in gv_customer.Columns)
        {
            col.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains;
        }
    }

这是点击一行时显示底部的代码:

private void gv_customer_RowClick(object sender, RowClickEventArgs e)
    {
        try
        {
            DataRowView selectedRow = GetCustomersGridSelectedRow();
            if (selectedRow != null){ btn_selectCustomer.Enabled = true; }
            lbl_valueCustomerID.Text = GetCustomerID(selectedRow); 
            lbl_valueCustomerName.Text = GetCustomerName(selectedRow);
            lbl_valueCustomerAddress.Text = GetCustomerAddress(selectedRow);
            lbl_valueCustomerCity.Text = GetCustomerCity(selectedRow);
            lbl_valueCustomerZipCode.Text = GetCustomerZipCode(selectedRow);
            lbl_valueCustomerCountry.Text = GetCustomerCountryCode(selectedRow);
        }
        catch{}
    }

EDIT2:来自用户的新信息-> 在安全模式下运行应用程序时,一切都很好..

谢谢,

地狱猫8

【问题讨论】:

  • 有什么问题?从截图看不出来。
  • 对不起,我忘记了那部分。我编辑了我的帖子,谢谢。
  • 只有查看源代码的人才可以提出解决方案。
  • 空的 try-catch 并不能帮助您查看是否有问题。
  • 客户信息面板位于 GridView 后面是否可能是 Z-Ordering 问题(假设 GridView 设置为 Dock.Fill)?

标签: c# winforms user-interface gridview datagridview


【解决方案1】:

对我来说,这听起来像是一种竞争条件。缺失控件的显示是否依赖于数据网格中加载的某些数据?如果是这样,未加载的数据可能会导致后续控件的加载失败。

你能发布加载表单的代码吗?

您可以使用 async / await 仅在 DataGrid 完成加载后执行相关表单逻辑。

【讨论】:

  • 缺少的部分取决于要显示的内容。它只是面板上的一张桌子,带有标签。但是当用户点击上面gridview中的一行时,它会将gridview中的数据填充到下面的不可见标签(默认状态)中。
猜你喜欢
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2013-04-19
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
相关资源
最近更新 更多