C#WinForms应用程序:DataGrid和SelectAll

时间:2010-11-27 18:07:07

标签: c# winforms datagrid

C#,。net 3.5 WinForm应用程序

我在模式弹出窗口(另一种)窗体中有一个DataGrid。我确实将对象添加到数据网格,并希望在表单显示时选择它们。听起来很简单,因为有一种方法是“SelectAll”。

但是,只有在数据网格已经可见时,此方法似乎才有效。我的订单是:1)添加对象2)调用select all 3)显示模态形式。但是当它显示时,对象会显示但不会被选中。

DialogResult r = myDialogForm.ShowModalDialog(); // objects are added, and SelectAll was called

有人知道如何完成SelectAll - 即使DataGrid还不可见。

- 关于HPT的评论(更改订单)

当我调用模态形式(System.Windows.Forms.ShowDialog)时,我没有机会[1]在(!)显示模态形式后调用SelectAll - 这正是问题。

下次“我的代码”到达时是DialogResult被传回的时间。可见性由底层方法(.NET框架Forms.ShowDialog)隐式设置为true。

[1]可能的解决方法是在表单变为可见时发生事件,然后发送到SelectAll。如果我找不到更好的东西,我会试试。

3 个答案:

答案 0 :(得分:0)

你应该改变你的情景!

  1. 添加对象
  2. 将dgv可见性设置为false
  3. 显示模态表单
  4. 致电dgv.SelectAll()
  5. 将dgv visibility设置为true

  6. EDITED

    你可以处理所显示的表格事件。 场景将是:

    DialogForm myDF = new DialogForm();
    //here you add data to your dgv in myDF
    myDF.ShowDialog();
    

    dgv.Visible设置为false,您可以在InitializeComponent(); this.Shown += new EventHandler(DialogForm_Shown);之后处理DialogForm Cunstructor中的已显示事件,然后

        void DialogForm_Shown(object sender, EventArgs e)
        {
           dgv.SelectAll();
           dgv.Show();
        }
    

答案 1 :(得分:0)

你是否尝试过将SelectAll添加到Activated()事件中...但是,我会创建一个表单变量Boolean来识别是否已经处理了SelectAll所以每次你可以Alt-Tab到另一个时都不会这样做应用程序和返回(是的,我知道,有些人在对话框提示之间执行此操作),否则将再次重新选择。

bool WasSelectAllProcessed = false;  && at the form level

然后,在Activated事件中,当SelectAll全部可见时产生影响

if ( ! WasSelectAllProcessed )
   dgv.SelectAll();

答案 2 :(得分:0)

我测试了它:

当网格不可见时,忽略

SelectAll。解决方案是在网格变为可见时注册事件(例如VisibilityChanged),然后调用SelectAll

当然,这个标志是否完成将有助于避免冗余呼叫。此外,当网格已经可见时,直接调用SelectAll是一种很好的方法。

与HPT和DRapp的建议非常相似。谢谢你帮助我。