如何防止在表单加载时选择datagridview单元格

时间:2011-09-07 11:08:53

标签: c# .net winforms datagridview

如何在此

的表单加载时未选择数据网格视图单元格

我已经尝试了太多

我的dgvproducts属性为(readonly = false,selection mode = CellSelect)

1)我已将此代码放在form shown事件中,但这对我不起作用..

         dgvProducts.Clearselection();

2)我已将上述代码放在databinding event中,如下所示..

     private void dgvProducts_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
     {
         //dgvProducts.ClearSelection();
         ((DataGridView)sender).ClearSelection();
     }

它对我不起作用......

3)我已经放置了类似的代码,我在form load event中添加了额外的行,但对我来说不起作用..

  dgvProducts.ClearSelection();
  dgvProducts.currentcell = null;

但这对我不起作用....

这是我的表单加载代码

      private void SellEquipment_Load(object sender, EventArgs e)
      {
            getProductDetails();
            dgvProducts.Columns[0].Visible = false;

            for (int i = 0; i < dgvProducts.Columns.Count; i++)
            if (dgvProducts.Columns[i] is DataGridViewImageColumn)
            {
                ((DataGridViewImageColumn)dgvProducts.Columns[i]).ImageLayout = DataGridViewImageCellLayout.Stretch;
                break;
            }
      }

这是我的getproductdetails代码

   private void getProductDetails()
   {
        var products = from productlist in dbcontext.products
                       select new
                       {
                           productid = productlist.productId,
                           Name = productlist.Name,
                           Image = productlist.Image,
                           Description = productlist.Description,
                           Price = productlist.Price
                       };

        BindingProductsource.DataSource = products;
        dgvProducts.DataSource = BindingProductsource;
        dgvProducts.ClearSelection();         
   }

任何人都可以帮忙...

非常感谢......

2 个答案:

答案 0 :(得分:5)

尝试创建一个新事件OnShow并执行以下代码:

    protected override void OnShown(EventArgs e)
    {
        if (this.dataGridView1.SelectedCells.Count > 0)
        {
            for (int i = 0; i < this.dataGridView1.SelectedCells.Count; i++)
                this.dataGridView1.SelectedCells[i].Selected = false;
        }
    }

答案 1 :(得分:0)

我发现@Mitja Bonca在Form.OnShown()中建议的覆盖the answer确实符合我的目的。但是,我发现利用DataGridView.ClearSelection()可以让我实现更精简的解决方案:

protected override void OnShown(EventArgs e)
{
    this.dataGridView1.ClearSelection();
    base.OnShown(e);
}

关于对base.OnShown()的调用,Microsoft在其文档中建议:

  

对继承者的说明

     

在派生类中重写OnShown时,请务必调用基类   class的OnShown方法,以便注册的代理接收事件。