0

SQLデータベースでアイテムを検索し、別のウィンドウに可能な結果のリストをポップする関数を備えたac#フォームがあります。ユーザーが行を選択するまで待ってから、その結果を返したいです。すべてが期待どおりに機能しますが、アイテムが選択されるまでループで待機する効率的な方法が思いつきません。何か案は?

ウィンドウを表示する関数:

      // Some sql crap to fill a dataset...//

      Da.Fill(Items, "Items");
      Connection.Close();

      var ItemSearch = new Window1(); // Load new window with a datagrid
      ItemSearch.Show();
      ItemSearch.dataGrid1.ItemsSource = Items.Tables["Items"].DefaultView;
      ItemSearch.dataGrid1.SelectionMode = DataGridSelectionMode.Single;
      ItemSearch.dataGrid1.SelectionUnit = DataGridSelectionUnit.FullRow;

      while (ItemSearch.dataGrid1.SelectedItem != null)
      {
        // Do something until the user selects a row, then return that row
          Thread.Sleep(100); // Doesn't work... Locks whole screen
      }

      }
      return ItemCode; // Selected row
4

1 に答える 1

0

を使用しItemSearch.ShowDialogます。フォームが閉じられるまで、後続のコードの実行がブロックされます。

また、フォーム自体に datagrid1 プロパティを設定する必要があります。datasource を window1 コンストラクターに渡します (デフォルトのコンストラクターをオーバーロードする必要があります)。

  var ItemSearch = new Window1(Items.Tables["Items"].DefaultView); 
  ItemSearch.ShowDailog();

Window1 コンストラクター:

public Window1(System.Data.DataView datasource)
  {  
      InitializeComponent();

      dataGrid1.ItemsSource = datasource;
      dataGrid1.SelectionMode = DataGridSelectionMode.Single;
      dataGrid1.SelectionUnit = DataGridSelectionUnit.FullRow;
  }
于 2013-02-10T14:51:55.403 に答える