Кнопка включения 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;
}

Кстати, это странный подход, что если кто-то захочет изменить названия кнопок? Я не буду хранить имена в базе данных, но их тип / значение. Не используйте цикл, чтобы найти их.

Другие вопросы по тегам