繁体   English   中英

C#WinForms应用程序:DataGrid和SelectAll

[英]C# WinForms application: DataGrid and SelectAll

C#、. net 3.5 WinForm应用程序

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

但是,该方法似乎仅在数据网格已经可见时才起作用。 我的命令是:1)添加对象2)调用全选3)显示模式形式。 但是,当显示时,将显示但未选择对象。

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

有人知道我如何才能完成SelectAll-即使DataGrid尚不可见。

-关于HPT的评论(更改顺序)

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

下次到达“我的代码”是将DialogResult返回。 (.NET框架Forms.ShowDialog )基础方法将Visibility隐式设置为true。

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

你应该改变你的情况!

  1. 添加对象
  2. 将dgv可见性设置为false
  3. 显示模态形式
  4. 调用dgv.SelectAll()
  5. 将dgv可见性设置为true

已编辑

您可以只处理显示的表单事件。 该方案将是:

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

dgv.Visible设置为false ,您可以在InitializeComponent();之后处理DialogForm Cunstructor中的Shown事件InitializeComponent(); 像这样this.Shown += new EventHandler(DialogForm_Shown); 接着

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

您是否尝试过将SelectAll添加到Activated()事件中...但是,我将创建一个表单变量布尔值以标识SelectAll是否已被处理,因此每次您Alt-Tab切换到另一个应用程序并返回时它都不会执行(是的,我知道,有些人在对话框提示之间执行此操作),否则将再次重新选择全部。

bool WasSelectAllProcessed = false;  && at the form level

然后,在“已激活”事件中,当全都可见时,SelectAll将产生影响

if ( ! WasSelectAllProcessed )
   dgv.SelectAll();

我已经测试过了:

当网格不可见时,将忽略SelectAll 解决方案是在网格变得可见时(例如VisibilityChanged )注册一个事件,然后调用SelectAll

当然,标记是否完成将有助于避免重复调用。 同样,当网格已经可见时,直接调用SelectAll是一个很好的方法。

与HPT和DRapp的建议几乎相同。 多谢您的协助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM