我想从DataGridView
的选定行中获取值,并将它们分配给几个不同的行
当控件的名称与列的名称匹配时,对表单进行控制(TextBox
,ComboBox
和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()
和Convert.ToDecimal()
代替Convert.ToInt32()
,但结果没有变化。
NumericUpDown
的范围已设为-1和999。
答案 0 :(得分:0)
这不是一个答案,而是一种减少错误搜索空间的方法,因为很多事情都在幕后进行。
您能否请将代码更改为
foreach (Control c in myForm.Controls)
{
if (c is NumericUpDown)
(c as NumericUpDown).Value = 12;
else
c.Text = "12";
}
在此之后,所有控件都应设置为12.您可以测试它并返回观察结果。