Кнопка включения C# с использованием datatable для цикла
Я работаю над проектом авторизации и хочу написать код для включения авторизованных кнопок с циклом for при открытии формы.
Авторизованные кнопки пришли из базы данных SQL
row.Enabled = true;
дает мне эту ошибку;
"datarow does not contain a definition for "Enabled" and no extension method 'Enabled' accepting a
first argument of type 'DataRow' could be found(are you missing a
directive reference or an assembly reference?)"
Это мой код
public void yetkiver()
{
SqlDataAdapter adapter1903 = new SqlDataAdapter();
SqlCommand cmd1903 = new SqlCommand("select distinct buttonname from authorization where Isactive=1 and usercode='user1'", con);
DataTable dt1903 = new DataTable();
DataSet ds1903 = new DataSet();
adapter1903.SelectCommand = cmd1903;
adapter1903.Fill(ds1903);
dt1903 = ds1903.Tables[0];
foreach (DataColumn col in dt1903.Columns)
{
foreach (DataRow row in dt1903.Rows)
{
row.Enabled = true;
}
}
}
1 ответ
Конечно DataRow
не имеет Enabled
имущество. Вы хотите включить кнопку с этим именем. Таким образом, вы должны найти его в форме. Ты можешь использовать Controls.Find
и LINQ:
foreach (DataRow row in dt1903.Rows)
{
string buttonName = row.Field<string>("buttonname");
Button btn = this.Controls.Find(buttonName, true).OfType<Button>().SingleOrDefault(); // throws an exception if multiple found
if(btn != null)
btn.Enaled = true;
}
Кстати, это странный подход, что если кто-то захочет изменить названия кнопок? Я не буду хранить имена в базе данных, но их тип / значение. Не используйте цикл, чтобы найти их.