无法使用DataGridVew选择行或控制滚动条

时间:2018-01-29 03:25:54

标签: c# multithreading datagridview scrollbar

也许这是一个新手问题。但我一直在寻找高低,没有运气,因为我尝试过的任何事情都没有。

我有一个DataGridView名为dgvDeviceList,其中包含5列:FormMain窗口中的ID,设备名称,Mac地址,RSSI和广告类型。 当我使用方法扫描附近的蓝牙设备时,一旦找到一个,DataGridView将添加一个新创建的行。

但是当扫描正在进行或停止时,我无法选择行或控制(向上/向下滚动)滚动条。它看起来dgvDeviceList没有滚动条。在某些论坛上,它被描述为multiple threading problem,但不幸的是,他们提供的方法无法解决问题。这是代码:

    int rowIndex = 1;

    private void SetupScanResultHandler()
    {
        ScanCallBack.ScanResultHandler = (result) =>
        {
            if (result != null)
            {
                foreach (var item in result.ScanRecords)
                {
                  //the following InvokeRequired method is provided by internet
                    if (dgvDeviceList.InvokeRequired)
                    {
                        dgvDeviceList.Invoke((MethodInvoker)(() =>
                        {
                            SetupDeviceListDataGridView(item);

                        }));
                    }
                    else
                    {
                        SetupDeviceListDataGridView(item);

                    }

                    rowIndex++;
                }
            }
        };
    }

    private void SetupDeviceListDataGridView(CyScanRecord item)
    {
        DataGridViewRow row = dgvDeviceList.Rows[dgvDeviceList.Rows.Add()];
        row.Cells[0].Value = rowIndex;
        row.Cells[1].Value = Utility.GetDeviceName(item.AdvertisementData.RawData.Length, item.AdvertisementData.RawData);
        row.Cells[2].Value = Utility.InsertFormat(item.PeerDeviceAddress.Address.ToString("X12"), 2, ":");
        row.Cells[3].Value = item.RSSI.ToString() + "dBm";
        row.Cells[4].Value = item.AdvertisementType.ToString();

    }

Screen shoot

  

如果您能发布一些代码或指示我,我将非常感激   我应该研究的正确方法。感谢。

2 个答案:

答案 0 :(得分:0)

将值添加到DataTable而不是DGV。确保添加新行:DataRow newRow = new dt1.Rows.Add();

     private void SetupDeviceListDataGridView(DataRow row)
     {
                row[0] = 5;
                row[1] = 25;
                row[2] = 25;
                row[3] = 10;
                row[4] = 35;

                dgvDeviceList.DataSource = null;
                dgvDeviceList.DataSource = dataTabl;

      }

答案 1 :(得分:0)

糟糕!我在属性列表中将Enable属性设置为false。代码dgvDeviceList.enable = true;可以解决问题。应该没有错误。

Listview and Datagridview are always disabled