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

Я хочу отключить элемент списка переключателей, если текущее системное время больше, чем элемент списка radiobutton.


i am facing issue i have radiobutton with different time slot and i want to disable radio button list item if system current time is more than radiobutton list item.

I am getting error input string is not in correct format..

What I have tried:

<pre>  string id = Request.QueryString["id"];
        txtdate.Text = Calendar1.SelectedDate.ToShortDateString();
        Calendar1.Visible = false;
       
      //  DateTime txtMyDate = DateTime.Parse(txtdate.Text);
        SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        string Query = "select slot from appoint where selectdate = @date and doc_id='"+id+"'";
        SqlCommand cmd = new SqlCommand(Query, cnn);
        cmd.Parameters.AddWithValue("@date", txtdate.Text);
        DataTable dtAdmin = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dtAdmin);
        if (dtAdmin.Rows.Count > 0)
        {
            string[] slots = dtAdmin.Rows.OfType<DataRow>().Select(k => k["slot"].ToString()).ToArray();
            string time = DateTime.Now.ToString("HH:mm tt");

            foreach (ListItem item in RadioButtonList1.Items)
                if (slots.Contains(item.Text) && Convert.ToInt32(item.Text) < Convert.ToInt32(time))
                {
               
                        item.Enabled = false;
                    
                }
                else
                {
                    item.Enabled = true;
                    
                }

        }

ADI@345

foreach (элемент ListItem в RadioButtonList1.Предметы)
если (слоты.Содержит(item.Text) && конвертировать.ToInt32(item.Text) < конвертировать.ToInt32(time)) я получаю ошибку только в этой строке ..

1 Ответов

Рейтинг:
8

Karthik_Mahalingam

пробовать

foreach (ListItem item in RadioButtonList1.Items)
            { 
                DateTime dt =  DateTime.ParseExact(item.Text, "HH:mm tt", CultureInfo.CurrentCulture);
                item.Enabled = DateTime.Now > dt; 
            }

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


ADI@345

пункт.Enabled = DateTime.Now.ToString("HH:mm tt") > dt;

мне нужны только час и минута, но дата и время.теперь формат другой .я использую вышеуказанный код, но получаю ошибку.

Karthik_Mahalingam

значение datetime.Метод parseexact(пункт.Text, "HH:mm tt", CultureInfo.CurrentCulture); --> Он дает вам сегодняшнюю дату и время из списка
надеюсь, вы поняли эту логику?

ADI@345

ДТ датавремя = Датавремя.Метод parseexact(пункт.Текст, "чч:мм ТТ", свойство CultureInfo.Свойства currentculture);

ПОЛУЧЕНИЕ ОШИБКИ В ЭТОЙ СТРОКЕ..
Строка не была распознана как допустимая Дата-Время.

Karthik_Mahalingam

какова ценность, которую вы получаете в товаре?Текст

ADI@345

В dt = 01-01-0001 00:00:00 значение я получаю и item.text="9:00 AM"

Karthik_Mahalingam

ок, есть проблема, из 9 что не ДХ, Его Превосходительство даст универсального решения.

ADI@345

какое было бы правильное решение..

Karthik_Mahalingam

пробовать

DateTime dt = DateTime.ParseExact(item.Text, new string[] { "HH:mm tt", "H:mm tt", "HH:m tt", "H:m tt" }, CultureInfo.CurrentCulture, DateTimeStyles.None);

ADI@345

Строка не была распознана как допустимая Дата-Время.
снова получаю ту же ошибку.


мой radibutton listitem содержит:
&ЛТ;АСП:текст элемент listitem="9:00 АМ" и GT;9:00 утра
&ЛТ;АСП:текст элемент listitem="9:15 утра"и GT;9:15 утра
&ЛТ;АСП:текст элемент listitem="9:30 утра"и GT;9:30 утра
&ЛТ;АСП:текст элемент listitem="9:45 утра"и GT;9:45 утра

ADI@345

foreach (элемент ListItem в RadioButtonList1.Предметы)
{
ДТ датавремя = Датавремя.Синтаксический анализ(поз.Текст);


если (слоты.Содержит(пункт.Текст) &&усилителя; дата и время.Сейчас.Метод toString("чч:мм ТТ")&ГТ;ДТ)
{

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

}

я использую этот код, но снова получаю ошибку..оператор > не может быть применен к операндам типа 'string' и 'system.datetime'

Karthik_Mahalingam

это недопустимый синтаксис DateTime.Now.ToString("HH:mm tt")>dt
вы не можете сравнить строку с datetime.

ADI@345

и все же я получаю ту же ошибку.. Строка не была распознана как допустимая Дата-Время.

Karthik_Mahalingam

опубликуйте свой обновленный код и покажите элементы списка, отображаемые в элементе управления

ADI@345

строка id = запрос.QueryString["id"];
txtdate.Текст = Calendar1.Значения свойства selecteddate.ToShortDateString();
Calendar1.Видна = ложь;

// TxtMyDate датавремя = Датавремя.Parse(txtdate.Текст);
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
строка запроса = "выбрать слот из назначить где selectdate = @дата и doc_id='" + идентификатор + "'";
SqlCommand cmd = new SqlCommand(Query, cnn);
cmd.параметры.AddWithValue ("@date", txtdate.Текст);
DataTable dtAdmin = новый DataTable();
SqlDataAdapter da = новый SqlDataAdapter(cmd);
da.Fill(dtAdmin);
если (dtAdmin.Строк.Count > 0)
{
строка[] слотов = dtAdmin.Строк.Метод oftype&ЛТ;строкаданных и GT;().Выберите(к =&ГТ; к [интервал].Метод toString()).Метод toArray();

foreach (элемент ListItem в RadioButtonList1.Предметы)
{

ДТ датавремя= Датавремя.Метод parseexact(пункт.Текст, "h:mm tt" , CultureInfo.Языка и региона существует);


если (слоты.Содержит(item.Text) && DateTime.Теперь >dt)
{

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

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

}

}
}

В dt я получаю {01-01-0001 00:00:00}..

Karthik_Mahalingam

используйте эту строку

DateTime dt = DateTime.ParseExact(item.Text, new string[] { "HH:mm tt", "H:mm tt", "HH:m tt", "H:m tt" }, CultureInfo.CurrentCulture, DateTimeStyles.None);

ADI@345

я использую эту строку, но получаю ту же ошибку.

Karthik_Mahalingam

подвожу

 //{11/15/2017 09:00:00}
            DateTime dt = DateTime.ParseExact("9:00 AM", new string[] { "HH:mm tt", "H:mm tt", "HH:m tt", "H:m tt" }, CultureInfo.CurrentCulture, DateTimeStyles.None);

ADI@345

да, но в dt= 01-01-0001 00:00:00

Karthik_Mahalingam

вы запускаете эту строку отдельно и сообщаете, какое значение вы получаете в dt

DateTime dt = DateTime.ParseExact("9:00 AM", new string[] { "HH:mm tt", "H:mm tt", "HH:m tt", "H:m tt" }, CultureInfo.CurrentCulture, DateTimeStyles.None);

Karthik_Mahalingam

пробовать

 foreach (ListItem item in RadioButtonList1.Items)
            {
                string time = item.Text;
                string day = DateTime.Now.ToString("MM-dd-yyyy");
                string text = day + " " + time;
                DateTime dt = DateTime.ParseExact(text, new string[] { "MM-dd-yyyy HH:mm tt", "MM-dd-yyyy H:mm tt", "MM-dd-yyyy HH:m tt", "MM-dd-yyyy H:m tt" }, CultureInfo.CurrentCulture, DateTimeStyles.None);
                item.Enabled = DateTime.Now > dt;
            }

ADI@345

Я на самом деле не знаю, почему я не получаю этого, я читаю везде в google для этого..я не знаю, какую ошибку я сделал здесь...

ADI@345

в dt я получаю это, когда запускаю отдельно {15-11-2017 09:00:00}

Karthik_Mahalingam

в цикле проверять, какой элемент вы получаете ошибку

ADI@345

я получаю ошибку изначально после входа в цикл для первого элемента

Karthik_Mahalingam

хорошо что такое текст первого элемента

ADI@345

&ЛТ;как ASP:radiobuttonlist с ИД="RadioButtonList1" атрибут runat="сервер" ширина="100%" CssClass="РБЛ" RepeatColumns="2" RepeatLayout="поток" RepeatDirection="горизонтальный" и GT;


&ЛТ;АСП:текст элемент listitem="9:00 ч." &ГТ;9:00 утра
&ЛТ;АСП:текст элемент listitem="9:15 утра"и GT;9:15 утра
&ЛТ;АСП:текст элемент listitem="9:30 утра"и GT;9:30 утра
&ЛТ;АСП:текст элемент listitem="9:45 утра"и GT;9:45 утра

<asp:ListItem Text="10:00AM">10:00AM
<asp:ListItem Text="10:15AM">10:15AM
<asp:ListItem Text="10:30AM" >10:30AM
<asp:ListItem Text="10:45AM">10:45AM

Karthik_Mahalingam

раньше вы размещали сообщения с пробелом, а теперь вы разместили сообщения без пробела между минутами и "AM/PM"

ADI@345

9:00 утра

Karthik_Mahalingam

космическая проблема, попробуйте это

  DateTime dt = DateTime.ParseExact(item.Text, new string[] { "HH:mmtt", "H:mmtt", "HH:mtt", "H:mtt" }, CultureInfo.CurrentCulture, DateTimeStyles.None);

ADI@345

на самом деле я внес изменения с помощью справки google..

Karthik_Mahalingam

можете ли вы опубликовать скриншот элемента управления и написанный вами код

ADI@345

сэр, в codeproject нет возможности опубликовать скриншот..

ADI@345

тот же вопрос

Karthik_Mahalingam

можете ли вы запустить этот код и сказать мне значение, которое вы получаете в s

 List<string> lst = new List<string>();
            foreach (ListItem item in RadioButtonList1.Items)
            {
                lst.Add(item.Text);
            }
            string s = string.Join("|", lst);

ADI@345

S= "9:00AM |9:15AM |9:30AM |9:45AM |10:00AM |10:15AM|10:30AM|10:45AM|11:00AM|11:15AM|11:30AM|11:45AM|12:00PM|12:15PM|12:30PM|12:45PM|1:00PM|1:15PM|1:30PM|1:45PM|2:00PM|2:15PM|2:30PM|2:45PM"

Karthik_Mahalingam

пробовать

DateTime dt = DateTime.ParseExact(item.Text.Trim(), new string[] { "HH:mmtt", "H:mmtt", "HH:mtt", "H:mtt" }, CultureInfo.CurrentCulture, DateTimeStyles.None);

ADI@345

Наконец-то он работает , но дает ошибку в этом временном интервале "1:00 вечера"

Karthik_Mahalingam

хорошо, добавьте один формат.

ADI@345

сэр , я меняю чч на чч, это прекрасно работает..

Karthik_Mahalingam

крутой,

Karthik_Mahalingam

пункт.Включено = Дата-Время.Теперь < dt;

ADI@345

я думаю, что мой код работает ... я решил эту проблему..Большое спасибо...

Karthik_Mahalingam

добро пожаловать.