Я конвертирую свое приложение из WebForm в WinForm, и я пытаюсь определить, какие флажки выбраны пользователем. В WebForm FindControl()
мне удалось найти флажки. В WinForms это не то же самое или, по крайней мере, это не позволит мне это сделать. Что я могу использовать, чтобы найти, если флажок установлен в gridview и/или как я могу изменить это, чтобы позволить FindControl()
работать?
Здесь я нахожу элементы управления
var rows = dropdeadGridView.Rows;
bool isChecked = ((CheckBox)rows[j].FindControl("SelectCheckBox")).Checked;//problem
if (isChecked)
{
values += rows[j].Cells[2] + ",";
CurrentOrders = values;
}
Моя проблема лежит выше, потому что ниже я помещаю ее в массив и отделяю их, чтобы перейти к моему запросу.
string[] o = CurrentOrders.ToString().Split(',');
for (int i = 0; i < o.Length; i++)
{
SqlConnection dbConn = DBHelper.getConnection();
try
{
using (dbConn)
{
SqlCommand addJob = new SqlCommand(@"UPDATE ODetail SET L_NUMBER = @L_NUMBER WHERE S_O_NUMBER = @SONumber", dbConn);
addJob.Parameters.AddWithValue("@SONumber", o[i]);
addJob.Parameters.AddWithValue("@L_NUMBER", lNumber.Text);
dbConn.Open();
addJob.ExecuteNonQuery();
}
MessageBox.Show("Updated!");
}
catch (Exception ex)
{
throw ex;
}
Код ошибки
System.Windows.Forms.DataGridViewRow 'не содержит определения для "FindControl", и не может быть найден метод расширения "FindControl", принимающий первый аргумент типа "System.Windows.Forms.DataGridViewRow" (вам не хватает директивы using или ссылка на сборку?)
Вам не нужен FindControl
в WinForm. Вы можете просто сделать:
bool checkBoxValue = Convert.ToBoolean(dataGridView1.Rows[0].Cells[2].Value);
Предполагая, что вы сравниваете первый ряд, и ваш флажок находится в третьем столбце
Вы также можете перебирать каждую строку, чтобы получить выбранное значение флажка, например:
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
bool checkBoxValue = Convert.ToBoolean(dr.Cells[2].Value);
}