ADI@345 Ответов: 1

Отключение переключателей в списке radiobuttonlist


I have a single RadioButtonList control with 4 ListItems within it.  At run time, based on a condition in my database, I may need to disable one or more of those ListItems.


Что я уже пробовал:

void bind()
   {
       SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
       string Query = "select slot from appoint where selectdate ='" + txtdate.Text + "'";
       DataTable dtAdmin = new DataTable();
       SqlDataAdapter da;
       da = new SqlDataAdapter(Query, cnn);
       da.Fill(dtAdmin);
       if (dtAdmin.Rows.Count > 0)
       {
           foreach (ListItem item in RadioButtonList1.Items)
           {
               if (item.Text == Query)
               {

                   item.Enabled = false;
               }

               else
               {
                   item.Enabled = true;
               }
           }
       }
   }

1 Ответов

Рейтинг:
5

Karthik_Mahalingam

обратитесь к этому примеру


<asp:RadioButtonList ID="RadioButtonList1" runat="server">
          <asp:ListItem Text="one" Value="1" />
          <asp:ListItem Text="two" Value="2" />
          <asp:ListItem Text="three" Value="3" />
          <asp:ListItem Text="four" Value="4" />
      </asp:RadioButtonList>


Цитата:
Возможно, мне придется отключить один или несколько из этих списков.


string[] itemsToDisable = { "1", "2" };
          foreach (string item in itemsToDisable)
          {
             var listItem =  RadioButtonList1.Items.FindByValue(item);
             if (listItem != null)
                 listItem.Enabled = false;
          }


Примечание : Форматирование строки sql-запроса выполняется следующим образом уязвимый к SQL-инъекция[^] атаки
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]

использовать FindByText[^] или FindByValue[^] в зависимости от того, как вы заполняете элементы списка.
Исправление вашего кода
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
           string Query = "select slot from appoint where selectdate =@date";
           SqlCommand cmd = new SqlCommand(Query, cnn);
           cmd.Parameters.Add("@date", txtdate.Text);
           DataTable dtAdmin = new DataTable();
           SqlDataAdapter da = new SqlDataAdapter(cmd);
           da.Fill(dtAdmin);
           RadioButtonList1.Enabled = dtAdmin.Rows.Count > 0;


ADI@345

txtdate.Текст = Calendar1.Значения свойства selecteddate.ToString("ДД/ММ/гггг");
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
string Query = "select slot from assign where selectdate =@date";
DataTable dtAdmin = новый DataTable();
SqlDataAdapter da;
da = новый SqlDataAdapter(запрос, cnn);
da.Fill(dtAdmin);
если (dtAdmin.Строк.Count > 0)
{
foreach (элемент ListItem в RadioButtonList1.Предметы)
{
если (пункт.Текст == Запрос)
{

пункт.Включено = ложь;
}

еще
{
пункт.Включен = истина;
}
}
}

ADI@345

как я могу отключить radiobuttonlist 2 или 3 listitem в зависимости от состояния базы данных..

Karthik_Mahalingam

Если(пункт.Текст == dtadmin.Строки[o]["слот"].Нанизывать())
{

ADI@345

txtdate.Текст = Calendar1.Значения свойства selecteddate.ToString("ДД/ММ/гггг");
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
string Query = "select slot from assign where selectdate = @date";
SqlCommand cmd = new SqlCommand(Query, cnn);
cmd.Parameters.Add("@date", txtdate.Текст);
DataTable dtAdmin = новый DataTable();
SqlDataAdapter da;
da = новый SqlDataAdapter(cmd);
da.Fill(dtAdmin);
если (dtAdmin.Строк.Count > 0)
{
foreach (элемент ListItem в RadioButtonList1.Предметы)
{
если(пункт.Текст == dtAdmin.Строки[0]["слот"].Метод toString())
{

RadioButtonList1.Items[0].Enabled = false;
}

еще
{
RadioButtonList1.Items[0].Enabled = true;
}
}
}


я меняю свой код, но в dtAdmin.Rows.Count >0 это не считается , alwys показывает 0,но у меня есть одна запись в моей базе данных

Karthik_Mahalingam

пробовать

   da.Fill(dtAdmin);
            if (dtAdmin.Rows.Count > 0)
            {
                DataTable dtAdmin = null;
                foreach (ListItem item in RadioButtonList1.Items)
                    item.Enabled = item.Text == dtAdmin.Rows[0]["slot"].ToString();
            }

Karthik_Mahalingam

преобразовать текст в объект DateTime и передать команде параметр
txtdate.Текст
относиться значение datetime.Метод TryParseExact (Система)[^]

ADI@345

Моя конструкция :-
<asp:RadioButtonList ID="RadioButtonList1" runat="server" Width="100%">

<asp:ListItem Text="9:00 AM" Value="1">9:00 AM
<asp:ListItem Text="9:15 AM" Value="2">9:15 AM
<asp:ListItem Text="9:30 AM" Value="3">9:30 AM
<asp:ListItem Text="9:45 AM" Value="4">9:45 AM

<asp:ListItem Text="10:00 AM" Value="5">10:00 AM
<asp:ListItem Text="10:15 AM" Value="6">10:15 AM
<asp:ListItem Text="10:30 AM" Value="7">10:30 AM
&ЛТ;АСП:текст элемент listitem="10:45 утра" значение="8">в 10:45 утра


&ЛТ;АСП:текст элемент listitem="11:00 АМ" значение="9">В 11:00 утра
<asp:ListItem Text="11:15 AM" Value="10">11:15 AM
&ЛТ;АСП:текст элемент listitem="11:30 часов" значение="11">В 11:30 утра
<asp:ListItem Text="11:45 AM" Value="12">11:45 AM

&ЛТ;АСП:текст элемент listitem="12:00 Фестиваль" значение="13"&ГТ;12:00 вечера
<asp:ListItem Text="12:15 PM" Value="14">12:15 PM
&ЛТ;АСП:текст элемент listitem="12:30 вечера" значение="15">В 12:30 вечера
<asp:ListItem Text="12:45 PM" Value="16">12:45 PM

&ЛТ;АСП:текст элемент listitem="1:00 вечера" значение="17"&ГТ;1:00 вечера




Код:-
txtdate.Текст = Calendar1.Значения свойства selecteddate.ToString("ДД/ММ/гггг");
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
string Query = "select slot from assign where selectdate = @date";
SqlCommand cmd = new SqlCommand(Query, cnn);
cmd.параметры.AddWithValue ("@date", txtdate.Текст);
DataTable dtAdmin = новый DataTable();
SqlDataAdapter da = новый SqlDataAdapter(cmd);
da.Fill(dtAdmin);
если (dtAdmin.Строк.Count > 0)
{
foreach (элемент ListItem в RadioButtonList1.Предметы)
{
если(пункт.Текст == dtAdmin.Строки[0]["слот"].Метод toString())
{

пункт.Включено = элемент.Текст == dtAdmin.Строки[0]["слот"].Метод toString();
}


}
}

я не знаю, в чем моя ошибка.. когда я отлаживаю его, он не считает ни одной строки из базы данных, поэтому он не перемещается внутрь if(dtAdmin.Rows.Граф >0)..

Karthik_Mahalingam

запустите этот запрос и посмотрите, какое значение вы получаете в БД
выберите слот из назначенного места, где selectdate = 'ваша дата'

ADI@345

txtdate.Текст = Calendar1.Значения свойства selecteddate.Метод toString();
TxtMyDate датавремя = Датавремя.Parse(txtdate.Текст);
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
string Query = "select slot from assign where selectdate = @date";
SqlCommand cmd = new SqlCommand(Query, cnn);
cmd.параметры.AddWithValue ("@date", txtMyDate);
DataTable dtAdmin = новый DataTable();
SqlDataAdapter da = новый SqlDataAdapter(cmd);
da.Fill(dtAdmin);
если (dtAdmin.Строк.Count > 0)
{
foreach (элемент ListItem в RadioButtonList1.Предметы)
{
если(пункт.Текст == dtAdmin.Строки[0]["слот"].Метод toString())
{

RadioButtonList1.Items[0].Enabled = false;
}

еще
{
RadioButtonList1.Items[0].Enabled = true;
}
}
}
после разбора даты он работает нормально , но не отключает radiobutton selected listitem..

Karthik_Mahalingam

  da.Fill(dtAdmin);
            if (dtAdmin.Rows.Count > 0)
            {
                DataTable dtAdmin = null;
                foreach (ListItem item in RadioButtonList1.Items)
                    item.Enabled = item.Text == dtAdmin.Rows[0]["slot"].ToString();
            }

ADI@345

Теперь мой код работает нормально, спасибо за помощь, но все еще сталкивается с некоторой проблемой. то есть если у меня есть два слота в моей базе данных , то он отключит два radiobutton listitem, прямо сейчас только один listitem отключается.

txtdate.Текст = Calendar1.Значения свойства selecteddate.Метод toString();
TxtMyDate датавремя = Датавремя.Parse(txtdate.Текст);
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
string Query = "select slot from assign where selectdate = @date";
SqlCommand cmd = new SqlCommand(Query, cnn);
cmd.параметры.AddWithValue ("@date", txtMyDate);
DataTable dtAdmin = новый DataTable();
SqlDataAdapter da = новый SqlDataAdapter(cmd);
da.Fill(dtAdmin);
если (dtAdmin.Строк.Count > 0)
{
foreach (элемент ListItem в RadioButtonList1.Предметы)
если (пункт.Текст == dtAdmin.Строки[0]["слот"].Метод toString())
{

пункт.Включено = ложь;
}

еще
пункт.Включен = истина;
}

этот код работает нормально , но он отключает только один временной интервал, даже если у меня есть два двух временных интервала в моей базе данных

Karthik_Mahalingam

это просто, сделайте цикл for для итерации строк в datatable. и включите его на основе значения строки.

ADI@345

окого

Karthik_Mahalingam

проверьте приведенный ниже код.

Karthik_Mahalingam

  da.Fill(dtAdmin);
            string[] slots = dtAdmin.Rows.OfType<datarow>().Select(k=>k["slot"].ToString()).ToArray();
            if (dtAdmin.Rows.Count > 0)
            {
                foreach (ListItem item in RadioButtonList1.Items)
                    if ( slots.Contains( item.Text ))
                    {

                        item.Enabled = false;
                    }

                    else
                        item.Enabled = true;
            }

ADI@345

Большое спасибо, сэр, наконец-то мой код работает в соответствии с моими требованиями. но я не понимал этого кода..
строка[] слотов = dtAdmin.Строк.Метод oftype&ЛТ;строкаданных и GT;).Выберите(k=>k["слот"].Метод toString()).Метод toArray();

Karthik_Mahalingam

упрощенная версия

 List<string> lst = new List<string>();

            foreach (DataRow row in dtAdmin.Rows)
            {
                lst.Add(row["slot"].ToString());
            }
            string[] slots = lst.ToArray();

ADI@345

Оки, спасибо вам, сэр, за помощь..

Karthik_Mahalingam

Добро пожаловать