-2

DataGridViewコントロールの名前が列の名前と一致するときに、選択した行から値を取得し、それらをフォームのいくつかの異なるコントロールに割り当てたいと思います( TextBoxComboBoxおよびがありNumericUpDownます)。

これは私が現在コントロールを設定している方法です:

 Form myForm = new Form();
 if (comboBoxTable.Text == "Client")
{
       myForm = new EditClientDataWindow();
 }
else if (comboBoxTable.Text == "Agency")
 {
       myForm = new EditAgencyDataWindow();
 }
else if (comboBoxTable.Text == "Medicine")
 {
       myForm = new EditMedicineDataWindow();
 }
string val;
foreach (Control c in myForm.Controls)
{
    for (int i = 0; i < dataGridViewMDB.ColumnCount; i++)
    {
          val = dataGridViewMDB.SelectedRows[0].Cells[i].Value.ToString();
          if (dataGridViewMDB.Columns[i].Name.ToString() ==
                            c.Name.ToLower().Replace(c.GetType().ToString().ToLower().Replace("system.windows.forms.", ""), ""))
          {
          if (c is NumericUpDown)
               (c as NumericUpDown).Value = Convert.ToInt32(val);
          else
               c.Text = val;
          }
    }
}

を除いてNumericUpDown、他のタイプのコントロールは正しく設定されています。の場合NumericUpDown、デフォルトの -1 値しか取得できません。の代わりにdecimal.Parse()andも使用しようとしましたが、結果に変化はありません。Convert.ToDecimal()Convert.ToInt32()

の範囲はNumericUpDown-1 から 999 に設定されていました。

4

1 に答える 1

0

これは答えではありませんが、内部で多くのことが行われているため、エラー検索のスペースを減らす方法です。

コードを次のように変更してください

foreach (Control c in myForm.Controls)
{
    if (c is NumericUpDown)
       (c as NumericUpDown).Value = 12;
    else
       c.Text = "12";
}

この後、すべてのコントロールを 12 に設定する必要があります。テストして、観察に戻ってください。

于 2013-06-16T09:54:10.587 に答える