SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

グリッドデータをドラッグ&ドロップで操作し新しい表を作成する.NETアプリケーションを作る

「PowerTools ComponentOne Studio 2012J」のC1TrueDBGridコントロールを使った.NETアプリケーションの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

ドロップ側の処理

 ドロップ側の処理では、まず、ドロップをコピーで行うように設定します。

 次に、DragDropイベントハンドラでグリッドにデータを挿入する処理を実行し、データベーステーブル「編集用テーブル」を更新します。

 そして、1件のドラッグ&ドロップ操作が終わったら、次のドラッグ&ドロップ操作に備えドラッグ&ドロップ操作をリセットします。これは、独自のプロシージャ(メソッド)「ResetDragDrop」を作成して処理を実行します。

 これは、まず新しい行(追加する行)用のDataRowViewオブジェクトを作成します。そして、この行の各列にドラッグされた行の各列のデータを挿入します。

  1. DragEnterイベントハンドラでC1TrueDBGridクラスのEffectプロパティにドロップをコピーで行うように設定します。
  2. DragDropイベントハンドラで、C1TrueDBGrid2コントロールのグリッドのデータセットに新しい行を追加します。
  3. グリッドのカレントレコードを最後の行に移動します。
  4. そして、このグリッドデータを元にデータベーステーブル「編集用テーブル」をアップデートします(ただしテーブルは保存しませんので、プログラムを終了するとデータベースのテーブル「編集用テーブル」は空のままです)。
  5. 次のドラッグ&ドロップ操作に備え、ドラッグ側の強調表示をリセットしてドラッグ&ドロップ操作を取り消します。
  6. プロシージャ(メソッド)「ResetDragDrop」では、ドラッグ&ドロップ用座標を格納するメンバ変数を初期化し、MarqueeStyleプロパティをデフォルト表示に変更します。
Visual Basic
Private Sub C1TrueDBGrid2_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles C1TrueDBGrid2.DragEnter
    e.Effect = DragDropEffects.Copy  '(1)
End Sub

Private Sub C1TrueDBGrid2_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles C1TrueDBGrid2.DragDrop

    ' C1TrueDBGrid2のグリッドのデータセットに新しい行を追加します。
    Try
        Dim row As Integer = CInt(e.Data.GetData(GetType(Integer)))
        Dim mydataviewrow As DataRowView = Me.都立図書館リスト_編集用テーブル_DataDataSet.編集用テーブル.DefaultView.AddNew()  '(2)


        mydataviewrow("ID") = C1TrueDBGrid1(row, "ID").ToString()
        mydataviewrow("市区町村") = C1TrueDBGrid1(row, "市区町村").ToString()
        mydataviewrow("図書館名") = C1TrueDBGrid1(row, "図書館名").ToString()
        mydataviewrow("所在地") = C1TrueDBGrid1(row, "所在地").ToString()
        mydataviewrow("電話番号") = C1TrueDBGrid1(row, "電話番号").ToString()
        
        mydataviewrow.EndEdit()

        C1TrueDBGrid2.MoveLast()  '(3)

        C1TrueDBGrid2.Select()

        ' データベースに変更を反映  (4)

        Dim inserted As 都立図書館リスト_編集用テーブル_DataDataSet = Me.都立図書館リスト_編集用テーブル_DataDataSet.GetChanges(DataRowState.Added)
        If Not (inserted Is Nothing) Then
            Me.編集用テーブルTableAdapter.Update(inserted)
        End If
    Catch ex As System.Exception
        MessageBox.Show(ex.Message)
    End Try

    'ドラッグ&ドロップ操作をリセット
    ResetDragDrop()  '(5)

End Sub

Private Sub ResetDragDrop() '強調表示をリセットしてドラッグ&ドロップ操作を取り消す

    StartDrag_PT = Point.Empty  '(6)

    DragRowNo = -1
    C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder
    C1TrueDBGrid2.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder
End Sub
C#
 private void c1TrueDBGrid2_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Copy;  //(1)

}  
        
private void c1TrueDBGrid2_DragDrop(object sender, DragEventArgs e)
{
    // C1TrueDBGrid2のグリッドのデータセットに新しい行を追加します。
    try
    {
        int row = (int)e.Data.GetData(typeof(int));
        DataRowView mydataviewrow = this.都立図書館リスト_編集用テーブル_DataDataSet.編集用テーブル.DefaultView.AddNew();  //(2)


    mydataviewrow["ID"] = c1TrueDBGrid1[row, "ID"].ToString();
        mydataviewrow["市区町村"] = c1TrueDBGrid1[row, "市区町村"].ToString();
        mydataviewrow["図書館名"] = c1TrueDBGrid1[row, "図書館名"].ToString();
        mydataviewrow["所在地"] = c1TrueDBGrid1[row, "所在地"].ToString();
        mydataviewrow["電話番号"] = c1TrueDBGrid1[row, "電話番号"].ToString();

        mydataviewrow.EndEdit();

        c1TrueDBGrid2.MoveLast();  //(3)

        c1TrueDBGrid2.Select();

        // データベースに変更を反映  (4)

        都立図書館リスト_編集用テーブル_DataDataSet inserted = (都立図書館リスト_編集用テーブル_DataDataSet)this.都立図書館リスト_編集用テーブル_DataDataSet.GetChanges(DataRowState.Added);

        if(inserted != null)
        {
            this.編集用テーブルTableAdapter.Update(inserted);
        }
    }catch(System.Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    //ドラッグ&ドロップ操作をリセット
    ResetDragDrop();  //(5)

}

private void ResetDragDrop() // 強調表示をリセットしてドラッグ&ドロップ操作を取り消す
{
    StartDrag_PT = Point.Empty;  //(6)

    DragRowNo = -1;
    c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder;
    c1TrueDBGrid2.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder;
}

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6923 2012/12/27 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング