45章:DataGridView クラス (C#)

    作成2013.05.01

     数表を扱うには、DataGridView クラスを使用すると便利です。

  1. 参照元情報
     DataGridView クラスは
    「DataGridView クラス」にジャンプする
     で詳細の機能説明がありますが、かなり難解です。


  2. WPFでのDataGridView クラス (C#)
    DataGridView クラスは名前空間: System.Windows.Forms、アセンブリ: System.Windows.Formsの機能であり、WPFではユーザコントロールを使用する必要があります。
     サンプルコードはDataGridView クラスの極一部の機能を利用して作成しました。サンプルコードですので、極簡単な機能です。
     ダウンロード後は解凍してから使用してください。
      [WPFでのマルチウインドウ (VB)]をダウンロードする。
     解凍すると「45WpfDataGri1」フォルダーがあります。
    注(1)「45WpfDataGri1」フォルダーの「WpfDataGri1.sln」ファイルをダブルクリックすると「Express 2012 for Windows Desktop」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「WpfDataGri1.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. MultiWindow.slnの実行
    (1)「Express 2012 for Windows Desktop」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)画面が表示されます。
    (4)数表の直径の欄に数値を入力し、Enterで円の面積を計算します。
    (5)数表の行は自動的に追加されます。
    (6)Buttonはデバッグ用です。
    (7)クローズボックスで終了します。


  4. プロジェクトの構成
    (1)MainWindow.xaml
    ・Button1とUserControl1を配置します。
    (2)MainWindow.xaml.cs
    ・コードを配置します。
    (3)UserCntrol1
    ・dataGridView1を配置します。
    (4)UserCntrol1.cs
    ・コードを配置します。


  5. MainWindow.xamlの全コード
    <Window x:Class="WpfDataGri1.MainWindow"	
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"	
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"	
            xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"	
            xmlns:self="clr-namespace:WpfDataGri1"	
            Title="円の面積の計算" Height="350" Width="525">	
        <Grid>	
            <Grid.RowDefinitions>	
                <RowDefinition Height="25" />	
                <RowDefinition Height="*" />	
            </Grid.RowDefinitions>	
            <StackPanel Grid.Row="0">	
                <Button x:Name="Button1" Content="Button" Width="80" HorizontalAlignment="Left" Click="Button1_Click"/>	
            </StackPanel>	
                <WindowsFormsHost x:Name="wfHost"  Grid.Row="1">	
                <self:UserControl1 x:Name="myControl"  />	
            </WindowsFormsHost>	
        </Grid>	
    </Window>	
    

    ・一般的な記述です。


  6. MainWindow.xaml.csの全コード

    using System.Windows;
    
    namespace WpfDataGri1
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button1_Click(object sender, RoutedEventArgs e)
            {
                 var S = myControl.DGV.Rows[0].Cells[0].Value;
            }
        }
    }
    

    (1)private void Button1_Clickはデバッグ用であり、動作には影響しません。
    (2)var S = myControl.DGV.Rows[0].Cells[0].Value;でdataGridView1のセルの値を参照できます。


  7. UserCntrol1.csの全コード
    using System;
    using System.Windows.Forms;
    
    namespace WpfDataGri1
    {
        public partial class UserControl1 : UserControl
        {
            public double x;
            public double a;
            public DataGridView DGV;
    
            public UserControl1()
            {
                InitializeComponent();
                DGV = dataGridView1;
            }
    
            private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                if (dataGridView1.RowCount >= 2)
                {
                    int ir = dataGridView1.CurrentCell.RowIndex;
                    int ic = dataGridView1.CurrentCell.ColumnIndex;
                    
                    x = Convert.ToDouble(dataGridView1.Rows[ir].Cells[0].Value);
                    a = Math.PI * x * x / 4;
                    dataGridView1.Rows[ir].Cells[1].Value = a.ToString();
                }
            }
        }
    }
    

    (1)public DataGridView DGV;でdataGridView1を他のクラスで参照可能とします。
    (2)DGV = dataGridView1;で変数DGVにdataGridView1を設定します。
    (3)int ir = dataGridView1.CurrentCell.RowIndex;でカレントセルの位置を知ります。
    (4)x = Convert.ToDouble(dataGridView1.Rows[ir].Cells[0].Value);でxに直径を代入します。
    (5)a = Math.PI * x * x / 4;で面積を計算します。
    (6)dataGridView1.Rows[ir].Cells[1].Value = a.ToString();で面積を数表に代入します。


    感想:
    (1)非常に簡単な記載で数表が扱えます。







46章:DataGridView(2)コピー・ペースト (C#)に行く。

トップページに戻る。