Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изенить свойства Items в RadioButtonList? 
V
    Опции темы
dazy
Дата 2.1.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



На форме стоит RadioButtonList, заполняется данными из БД.
Задача: чтобы на основании данных любая строка могла изменять свойства (цвет, фон, текст, размер, добавить картинку).
Т.е. фактически надо получить обработку а-ля RowCreated  для GridView.

Подскажите, кто знает.

Или как эту задачу реализовать другими способами.
Пробовал в GridView вставлять RadioButton, и назначать им общий GroupName... Но GridView добавляет свои понты в это поле, и браузер не воспринимает группу как группу, а получается набор отдельных RadioButton"ов...



PM MAIL   Вверх
Mymik
Дата 3.1.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Вообще это делается с помощью JavaScript... Но можно делать и с помощью AutoPostBack.
Первый вариант конечно правельнее и логичнее...
А второй вариант -->> AutoPostBack="true" OnSelectedIndexChanged="<твой обработчик событий на сервере>"

Первый вариант приемлим если тебе нужно сделать незначительные изменения(отображение невидимого div, или изменения Background). Второй вариант используется в тех случаях когда тебе нужно перегенерить сайт, забрать данные из базы или сгенерить другую картинку (хотя сгенерить другую картинку мона с помощью подмены src у картинки :о) )


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
dazy
Дата 3.1.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Ни JavaScript ни AutoPostBack не подходит...

Не надо изменять свойства на стороне клиента. на стороне сервера вполне достаточно.
Необходимо и достаточно изменить свойства айтема RadioButtonList при получении данных из БД.

Например, получаем список вариантов, пишем их в RadioButtonList, затем рекомендуемый вариант подсвечиваем зеленым, а крайне не рекомендуемый (но все же возможный) красным... Отображаем все это дело клиенту. Ну а дальше клиент делает выбор и постит результат...
Цитата(dazy @  2.1.2007,  17:40 Найти цитируемый пост)
...... а-ля RowCreated  для GridView.


PM MAIL   Вверх
Mymik
Дата 3.1.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



dazy, я просто не понял твой вопрос... 
Ну если в зависимости от пришедших данных из СУБД, тогда <%= Eval("field") == "red" ? style="color:red" : style="color:black" %>
Если я опять таки правильно тебя понял...

Или ты уже и сам со всем разобрался :о)  smile 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
dazy
Дата 3.1.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Спасибо большое, то что надо!!!
Ну я примерно так и думал, только вот ни как эти <%-выражения не освою...
Блин, все хорошо, но МS хоть бы какой конструктор этих выражений встроили, что ли.... Иной раз такие конструкции получаются, хоть небоскреб возводи... 


PM MAIL   Вверх
Mymik
Дата 3.1.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



dazy, смотри <%= это все равно что Response.Write() а дальше идет самая стандартная конструкция условия, а Eval... ну надо запомнить :о). 
Это быстро с опытом прийдет, пару GridView построишь или еще каких-нибудь контролов где есть DataSource и сразу запомнишь.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
dazy
Дата 3.1.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Что я рано радовался, похоже...
Я с RadioButton попробовал, там получается, а с RadioButtonList ни как не пойму куда эту конструкцию биндить :(((
Там в дизайн-тайм нету доступа к итему, только к RadioButtonList в целом... 
В общем если не сложно, покажите куда чего вставлять... 
блин :(
PM MAIL   Вверх
Mymik
Дата 4.1.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



dazy, я сначала думал что мона это сделать с помощью
<имя твоего RadioButtonList>.Items[n].Attributes.CssStyle.Add() но оказалось что так нельзя :о) хотя с точки зрения синтаксиса написано тут все правильно, однако :о)... Вобщем продолбавшись полтора часа над этой задачей вместо того чтобы работать (а что, задача простая вроде бы, но интересная) я зашел в гугл и матюкаясь начал искать :о)... и... вобщем это баг такой у .NET Framework :о)... так что не судьба тебе такое сделать с помощью веб-контролов

Вобщем додумался пока что только до такого решения -->>
это сам Default.aspx
Код

    <form id="form1" runat="server">
    <div>
        <% for (int i = 0; i < table.Rows.Count; i++)
           { %>
            <input type="radio" name="rbName" id="rbName" runat="server" /><span style='<%= ItemStyle(table.Rows[i]["name"].ToString()) %>'><%=table.Rows[i]["name"].ToString() %></span>
        <% } %>
    </div>
    </form>


Код

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page
{
    protected DataTable table = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            CreateTable();
    }
    /* Создает таблицу с данными, в твоем случаи это будет браться откуда-то */
    private void CreateTable()
    {
        DataColumn col = new DataColumn();
        col.ColumnName = "name";
        col.DataType = typeof(string);
        table.Columns.Add(col);

        for (int i = 0; i < 10; i++)
        {
            DataRow row = table.NewRow();
            row["name"] = "name" + i.ToString();

            table.Rows.Add(row);
        }
        DataBind();
    }
    /* Метод который возвращает цвет для контрола */
    protected string ItemStyle(string item)
    {
        string color;
        switch (item)
        { 
            case "name0" :
                color = "color:red";
                break;
            case "name3" :
                color = "color:blue";
                break;
            case "name6" :
                color = "color:green";
                break;
            default :
                color = "color:black";
                break;
        }
        return color;
    }
}




--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
dazy
Дата 4.1.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Я вот что придумал
Код

    protected void RadioButtonList1_DataBound(object sender, EventArgs e)
    {
        ((RadioButtonList)sender).Items[0].Attributes.CssStyle.Add("FONT-WEIGHT", "bold");
    }


Только как значение проверять еще не понял... 
Т.е. в табличке 3 поля id, text и  isRight.

id заносится в DataValueField  , 
text заносится в  DataTextField 
а вот на основании  isRight должен меняться внешний вид.

У меня такой вариант зреет, заранее получать id для поля isRight, а потом в DataBound в цикле перебирать все итемы на предмет совпадения Items[i].Value и  id ...

PM MAIL   Вверх
Mymik
Дата 4.1.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



dazy, прикольно, а у тебя работает Items[0].Attributes.CssStyle.Add ??? У меня просто не работает и все... когда дебагером смотрю, то все как бы и должно собираться... а в итоге эта строчка не работает... точнее значения присваиваются, а в браузер к пользователю не уходят...


Цитата(dazy @  4.1.2007,  17:02 Найти цитируемый пост)
У меня такой вариант зреет, заранее получать id для поля isRight, а потом в DataBound в цикле перебирать все итемы на предмет совпадения Items[i].Value и  id ...

Я так понял ты берешь данные из базы... тогда не скармливай данные сразу твоему контролу, а сохрани в какое-нибудь private поле, и в твоем методе бери данные оттуда.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
dazy
Дата 4.1.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Цитата(Mymik @  4.1.2007,  21:36 Найти цитируемый пост)
а у тебя работает Items[0].Attributes.CssStyle.Add ??? 


Да, работает. Но я эту конструкцию кроме как из DataBound больше ни от куда не вызывал... не пробовал.

PM MAIL   Вверх
dazy
Дата 5.1.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Нашел способ вот так вот сделать. Как мне кажется, проще и удобнее.

Код

        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
            <ItemTemplate>
                <input type="radio" name="AnswerID" value='<%# Eval("AnswerID") %>' />   
                <span class='<%# Eval("IsRight").ToString()=="True" ? ".Green" : ".Black"%>'><%# Eval("Text") %></span>
                <br />
            </ItemTemplate>
        </asp:Repeater>


Таким образом все делается в одном месте. И данные на прямую запихиваются, и проверка идет "на лету".
Можно радио в одну ячейку вставлять а текст в другую, и у ячейки менять все что угодно, вроде и иконку можно добавить. В общем получилось широкое поле для деятельности.
Кроме того при нажатии на кнопку идентификатор возвращается нормальный (правда через коллекцию формы, ну и ладно), не надо все радио на чекед проверять. 
В общем можно еще пооптимизировать, но в и целом так вот мне придумалось.
Вроде справились smile

Это сообщение отредактировал(а) dazy - 5.1.2007, 12:56
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.