

Form1にDatagridviewを表示させ、  
Form1の検索メニューを押すと、  
Form2ダイアログが開き、検索する名前を入れます。  
Form2の検索を押すと、Form1の該当する名前にフォーカスします。

というプログラムを作成したいです。  
Form1とForm2間でForm1のDatagridviewのデータ、もしくは、  
Form2のtextboxのデータが上手く渡せません。

以下が途中のプログラムです。

Form1

[code]

    namespace datagrid
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
    
                // 3列定義します。
                dt.Columns.Add("PName", Type.GetType("System.String"));
                dt.Columns.Add("Age", Type.GetType("System.Int32"));
                //dt.Columns.Add("C", Type.GetType("System.DateTime"));
    
                // 4行追加します。
                for (int i = 0; i < 4; i++)
                {
                    DataRow row = dt.NewRow();
                    switch (i) {
                        case 0:
                            row["PName"] =　"太郎";
                            row["Age"] = 20;
                            break;
                        case 1:
                            row["PName"] = "次郎";
                            row["Age"] = 21;
                            break;
                        case 2:
                            row["PName"] = "三郎";
                            row["Age"] = 22;
                            break;
                        case 3:
                            row["PName"] = "四郎";
                            row["Age"] = 23;
                            break;
                    }
                    dt.Rows.Add(row);
                }
    
                // DataSetにdtを追加します。
                ds.Tables.Add(dt);
    
                dt.TableName = "Table1";
                //datagridviewに表示
                dataGridView1.DataSource = dt;
            }
    
            private void 検索ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form2 FS = new Form2();
                if (FS.ShowDialog() == DialogResult.OK)
                {
    
                }
    
            }
        }
    }
    
[/code]

Form2

[code]

    namespace datagrid
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string searchName = textBox1.Text;
                // PNameの列でserchNameと同じ文字列検索
                for(int i=0; ;i++)
                {
    
                }
            }
        }
    }
    
[/code]

Form1とForm2の画面です。ご教授の程、よろしくお願いいたします。  
[![画像の説明をここに入力](https://i.stack.imgur.com/yX0bd.png)](https://i.stack.imgur.com/yX0bd.png)


CC BY-SA 3.0
2016-12-19T15:16:11.523
31247
2016-12-19T16:47:14.543
19213
question
c#
Datagridviewのデータ検索について


`Form2`に`textbox1.Text`を公開するプロパティを定義して、`検索ToolStripMenuItem_Click`で参照するのが通常の設計だと思います。

[code]

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        public string SearchName
        {
            get
            {
                return textBox1.Text;
            }
            set
            {
                textBox1.Text = value;
            }
        }
        // button1_ClickはDialogResultプロパティを指定すれば不要
    }
    
[/code]

Form1

[code]

    private void 検索ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Form2 FS = new Form2();
        if (FS.ShowDialog() == DialogResult.OK)
        {
            // FS.SearchNameで処理を行う。
        }
    }
    
[/code]

また検索処理の一例としては以下のような形になります。

[code]

    for (var i = 0; i < dataGridView1.RowCount; i++)
    {
        var r = dataGridView1.Rows[i];
        if (object.Equals(((DataRowView)r.DataBoundItem)["PName"], FS.SearchName))
        {
            dataGridView1.ClearSelection();
            r.Selected = true;
            break;
        }
    }
    
[/code]


CC BY-SA 3.0
2016-12-19T16:47:14.543
31250
2016-12-19T16:47:14.543
5750
31247
answer