簡體   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