-2

私はしばらくの間問題に取り組んできましたが、ついにそれを理解しました。フォームの初期化中にコントロールを設定しようとしました。コントロールの値が設定されていないのは、コントロールがまだ描画されているためだと考えています (間違っている場合は訂正してください)。

私の部分的なフォームコード

//in form 1    
....
private void button2_Click(object sender, EventArgs e)
            {
                Form2 form = new Form2();
                form.Owner = this;
                form.Show(this);
            }
....}

    public Form2()
    {
        InitializeComponent();
        setData(); //Sets a datagridview's combobox column and databinds a datatable
        setGrid(); //Sets each row in the datagridview combobox's value to a string 
    }
    private void setData()
    {
        gvTest.AllowUserToAddRows = false;
        string strConn = "server=10.253.3.185;database=petersun-test1;user id=ctore;password=cqi$$;connection timeout=30";
        SqlConnection conn = new SqlConnection(strConn);
        DataTable dit = new DataTable();
        try
        {
            conn.Open();
            string sql = "SELECT LTRIM(RTRIM(COLUMN_NAME)) as ColumnName from INFORMATION_SCHEMA.COLUMNS where Table_Name='coproc' order by ORDINAL_POSITION";
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dit);

            DataGridViewComboBoxColumn dcDatabasefields = new DataGridViewComboBoxColumn();
            dcDatabasefields.DataPropertyName = "ColumnName";
            dcDatabasefields.HeaderText = "Database Field Name";
            dcDatabasefields.Name = "dbFields";
            dcDatabasefields.DisplayMember = "ColumnName";
            dcDatabasefields.ValueMember = "ColumnName";
            dcDatabasefields.Width = 200;
            BindingSource bsourceFields = new BindingSource();
            bsourceFields.DataSource = dit;
            dcDatabasefields.DataSource = bsourceFields;

            dcDatabasefields.DataSource = dit; // bsourceFields;
            gvTest.Columns.Add(dcDatabasefields);
        }
        finally
        {
            conn.Close();
        }

        DataTable dt = new DataTable();
        DataColumn dc = new DataColumn("options");
        dt.Columns.Add(dc);
        DataRow dr = dt.NewRow();
        dr["options"] = "A";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["options"] = "C";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["options"] = "D";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["options"] = "E";
        dt.Rows.Add(dr);
        gvTest.DataSource = dt;
    }
private void setGrid()
{
 foreach(DataGridView Row in gvGrid.Rows)
 {
   Row.Cells[0].Value = "string";
  }
}

1.コンポーネントが初期化されています 2.列を含むデータグリッドビューを作成します 3.列の値を設定します 4.フォームを描画します

私の考えは正しいですか?私の質問は、コントロールの値をどのフォーム イベントに設定すればよいですか? 私はいくつかの調査を行い、PAINT イベントについて考えていますが、どちらも確信が持てません。誰かがフォームのライフサイクルを詳細に説明したり、どこかを教えてくれませんか. ありがとう

4

1 に答える 1

0

コードを Form_load に追加しただけで、値がグリッドに追加されました

于 2013-08-18T20:49:04.800 に答える